那些年咱們追過的進程

隨着一句fork,一個新進程呱呱落地,但它這時只是老進程的一個克隆。    而後隨着exec,新進程脫胎換骨,離家獨立,開始了爲人民服務的職業生涯。    人有生老病死,進程也同樣,它能夠是天然死亡,即運行到main函數的最後一個"}",從容地離咱們而去;也能夠是自殺,自殺有2種方 式,一種是調用exit函數,一種是在main函數內使用return,不管哪種方式,它均可以留下遺書,放在返回值裏保留下來;它還甚至能可被謀殺, 被其它進程經過另一些方式結束他的生命。    進程死掉之後,會留下一具殭屍,wait和waitpid充當了殮屍工,把殭屍推去火化,使其最終歸於無形。    這就是進程完整的一輩子。
#include "wailer.h"

int main()
{
pid_t pid;
int status;

if((pid = fork()) < 0) //老爹進程生兒子進程
perror("fork error");
else if (pid == 0) {
if (( pid = fork()) < 0) //兒子進程生孫子進程
perror("fork error!");
else if (pid > 0) //兒子進程自殺
exit(0);
sleep(2);
printf("second child, parent pid = %d\n", getppid());
exit(0);
}

if(waitpid(pid, NULL, 0) != pid) //老爹進程, 等兒子呢
perror("waitpid error");
exit(0);//絕望的自殺
}
相關文章
相關標籤/搜索