Is script1 getting signaled (i.e. is the shell's value for ($? & 127) for script1 a non-zero value)? If so, what is the value? system() blocks SIGINT and SIGQUIT, but it's possible another signal is hitting it. I've seen wierd cases where a child spawned a vendor's utility that stupidly signaled the process group (e.g. something like SIGHUP). The child was ready and caught the signal, but the parent was blissfully ignorant of what signals might indirectly be thrown (and died). If this is the case, one way to get around this is to ignore the signal in the parent during the system() call...