当失败时,您应该使用_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 ...
}