当失败时,您应该使用
_exit(或它的同义词
_Exit)中止子程序
exec,因为在这种情况下,子进程可能会通过调用其
atexit处理程序,调用其信号处理程序和/或使其干扰父进程的外部数据(文件)。冲洗缓冲区。
出于同样的原因,您还应该
_exit在任何不执行的子进程中使用
exec,但是这种情况很少见。
在其他所有情况下,只需使用即可
exit。正如您自己部分指出的那样,Unix / Linux中的 每个
进程(一个除外
init)都是另一个进程的子进程,因此
_exit在每个子进程中使用意味着
exit在之外没有用
init。
switch (fork()) { case 0: // we're the child execlp("some", "program", NULL); _exit(1); // <-- HERE case -1: // error, no fork done ... default: // we're the parent ...}


