You sorta have what looks like one, where that "Profile Load Error" print happens. If you put a return right after that print, then the program would exit without attempting to process kim if it didn't exist. Or you could use os.reboot() like you have elsewhere.
Looking at the getExist() function, it could use some improvement. Particularly, it doesn't filter messages it's getting to make sure they're from cs. To make sure, you can replace this:
event , p1 , p2 = os.pullEvent("rednet_message")
with something more like this
repeat
p1 , p2 = rednet.receive(2) --or whatever timeout you like
until p1 and p1 == cs
The reason that you would use os.pullEvent would be if you wanted to handle other events, not just rednet messages. And using rednet.receive lets you specify a timeout, so that if the proper computer never replies, you don't just keep waiting forever (unless there's enough rednet spam that you never timeout, in which case you should probably just use a shorter timeout).
This code will ensure that you only process a response from cs, and will get that response if it occurs within the timeout no matter how much other traffic there is, eventually returning nil if cs never replies. The other usage would allow an errant rednet message cause getExist() to return nil, and since that is the ultimate cause of your error, it might be worth addressing.