Linux学习之系统编程篇:孤儿进程和僵尸进程(描述对象都是子进程)
生活随笔
收集整理的這篇文章主要介紹了
Linux学习之系统编程篇:孤儿进程和僵尸进程(描述对象都是子进程)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、孤兒進程
孤兒進程:不是沒有爹!會被領養。
過程:爹先死,孩子還活著,孩子稱為孤兒進程。
注意:孤兒會被 init 進程領養(init 進程是所有孤兒進程的父進程)。
設計領養目的:為了子進程結束后,可以回收子進程占有的系統資源,因為進程結束后,子進程自己能夠釋放用戶區空間,但無法釋放 PCB,只能由父親釋放。
二、僵尸進程
僵尸進程:是一個死的進程。
過程:孩子死了,爹不回收孩子的 PCB,此時,孩子稱為僵尸進程。
三、設計孤兒進程
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() {pid_t pid = fork();if(pid == 0) {sleep(1); // 子進程睡一秒,使父進程先執行return死掉printf("%d\n",getppid()); // 結果:子進程的ppid = 1 // 意味著被init進程領養}if(pid > 0){printf("%d\n",getpid()); // 結果:父進程的pid =3458}return 0;四、設計僵尸進程
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() {pid_t pid = fork();if(pid == 0) {printf("I am child"); // 先執行return死掉}if(pid > 0){ while (1) { sleep(1) // 父親一直sleep,因此沒有回收子進程,使子進程成為僵尸進程 }}return 0; }那么如何殺死僵尸進程呢?
注意: 不能用 kill -9 pid,因為這個命令是殺死活的進程,
我們用殺死父進程,使僵尸進程被領養,自動釋放。
總結
以上是生活随笔為你收集整理的Linux学习之系统编程篇:孤儿进程和僵尸进程(描述对象都是子进程)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux学习之系统编程篇:exec 函
- 下一篇: Linux学习之系统编程篇:进程回收(w