僵尸进程
在父进程中fork一个子进程,当子进程执行完成执行exit(0)后,将子进程的退出码存储在与之对应的PCB中。父进程则通过wait来获取退出码,并根据退出码来了解子进程的信息。
僵尸进程的概念:当子进程先于父进程结束时,父进程没有获取到子进程的退出码
孤儿进程的概念:父进程先于子进程结束,此时将由一个个叫INIT(pid=1,第一个被fork出来的进程) 的进程来“收养”这个孤儿进程。
我们将通过一段代码来了解僵尸进程:
让子进程运行打印三次先于父进程结束,每fork一次 我们都活会打印出进程的和它的父进程的pid
在运行程序时,将其放在后台运行(只需在后面加上&即可),可以看到,首先打印的是父亲进程,它的pid为3522,父亲进程的父进程是3483。在登陆Linux后,会获得一个叫做bash的进程,bash进程繁衍出其他所有进程。我们前面讲到的INT进程就是bash复制出来的第一个进程。所以父进程会有系统来做处理,我们关注的只是父进程复制出来的子进程。
我们在执行ps命令时会发现有两个text进程,那其实就是我们的父子进程。再看