进程通信:
system 调用关系
execlp 迭代关系(但进程号不变)
fork 多进程
下面就让我用一些形象的比喻,来对进程短暂的一生作一个小小的总结:
随着一句fork,一个新进程呱呱落地,但它这时只是老进程的一个克隆。
然后随着exec,新进程脱胎换骨,离家独立,开始了为人民服务的职业生涯。
人有生老病死,进程也一样,它可以是自然死亡,即运行到main函数的最后一个"}",从容地离我们而去;也可以是自杀,自杀有2种方式,一种是调用 exit函数,一种是在main函数内使用return,无论哪一种方式,它都可以留下遗书,放在返回值里保留下来;它还甚至能可被谋杀,被其它进程通过另外一些方式结束他的生命。 进程死掉以后,会留下一具僵尸,wait和waitpid充当了殓尸工,把僵尸推去火化,使其最终归于无形。
这就是进程完整的一生。
父进程死了后,子进程将成为孤儿进程,但init会为其收尸的。
子进程在父进程前先死的时候:父进程调用的waitpid的目的是为了可以为子进程收尸,要不然子进程会成为僵尸进程(如果他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程)。
只有父进程死了init才会收养这个父进程的所有子进程。父进程没死,init是不会为他的儿子收尸的
(init闲着没事干去为人家的子女收尸啊)
init只收养孤儿进程,并定期对孤儿收尸。