第5.3课.多输入之多线程

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)

猜你喜欢

转载自www.cnblogs.com/huangdengtao/p/12349672.html