1、进程fork()后,子进程子承父业,继续运行与父进程一样的程序,但是子进程可以通过调用exec(),走向与父进程完全不同的道路(将新程序加载到旧程序的地址空间,丢弃旧的程序,进程的栈,数据段,堆栈被新程序替换)。
2、制作僵尸进程
#include#include #include #include int main() { pid_t pid; pid = fork(); if (pid < 0) { printf("fork error.n"); }else if (0 == pid) { printf("child process.n"); sleep(10); exit(0); }else { printf("father process.n"); sleep(20); wait(NULL); } return 0; }
3、通过ps查看进程状态
10秒后,子进程退出,但是还没等到父进程的wait函数做回收 *** 作
子进程变成僵尸进程,状态是Z
4、进程一旦进入僵尸状态,立马变得刀q不入,kill -9 也无能为力。僵尸独占这id号,task_struct,内核堆栈内存空间
5、那应该怎么结束僵尸进程,搬出英叔
5.1、父进程wait函数,完成收尸
5.2、结束父进程,init进程来收尸
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)