随着一句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);//绝望的自杀
}