1.转载
https://www.cnblogs.com/zongzi10010/p/10574370.html
2.fork子进程
转载:https://www.cnblogs.com/zongzi10010/p/10574403.html
a.fork并不保证父子进程的执行顺序,会存在父进程先比子进程结束。这个时候子进程就可能由系统进程1(PID为1的init)接管
b.子进程返回0
c.父进程返回子进程的进程号(PID)
d.粗浅的理解就是fork之后创建一个一模一样的上下文,子进程也就是下一句话开始的。只不过fork获得的返回值在子进程中得到的是0。
即
if(0 == fork)
{
//子进程
}
else
{
//父进程
}
3.僵尸进程
子进程结束时,父进程会收到这个信号,如果父进程没有处理这个信号,也没有等待(wait)子进程。子进程虽然终止,但是还会在内核进程中占有表项。这时子进程成为僵尸进程。
父进程忽略SIGCHLD信号,捕捉它,wait它派生的子进程;或者父进程先终止,这时子进程的终止自动由init进程来接管。
解决办法:signal(SIGCHLD, SIG_IGN)