Linux进程的一生

转自:http://blog.csdn.net/monkey_d_meng/article/details/5562290 


对于Linux进程的一生,有人做过一个比较形象的比喻,比较有意思拿来分享一下:

随着一句fork,一个新的进程呱呱坠地,但他此时是父进程的一个克隆;

随着exec,新进程脱胎换骨,离家独立,开始了为人民服务的职业生涯;

人总有生老病死,进程也一样,他可以自然死亡,即运行到main函数的最后一个“}”,从容地离我们而去;

当然,他也可以自杀,自杀有2种方式:一种是调用exit函数,一种是在main函数内使用return,无论采用哪一种方式,他都可以留下遗书,放在返回值里面保留下来;

他甚至可以被谋杀,被其他进程通过另外一些手段结束他的生命;

进程死掉后,会留下一具僵尸;

       wait和waitpid充当了殓尸工,把僵尸推出去火化,使其最终归于无形。

 

============================================================================================

       子进程终止时,它与父进程之间的关联还会保持,直到父进程也正常地终止或父进程调用wait才宣告结束。因此,进程表中代表子进程的表项不会立刻释放。虽然子进程已经不再运行,但它仍然存在于系统中,因为它的退出码还需要保存起来以备父进程今后的wait调用使用。

       父进程异常终止,子进程自动将PID为1 的进程(即init)作为自己的父进程,子进程现在就是一个不再运行的僵尸进程,由init接管。僵尸进程将一直保留在进程表中直到被init进程所发现并释放。进程表越大,这一过程就越慢。应该尽量避免僵尸进程,因为在init清理它们之前,它们将一直消耗着系统的资源。

       才开始学习,过段时间再来发个wait和waitpid总结。

你可能感兴趣的:(Linux进程的一生)