孤儿进程 orphan

父进程结束退出,而它的子进程还在运行,这时的子进程就叫做孤儿进程。孤儿进程就被 init 进程(进程号为 1)收养,init 进程将对孤儿进程完成状态收集工作。孤儿进程没有危害,因为被 init 进程托管了,init 进程会处理孤儿进程的收集工作。

实例

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    pid_t pid;
    pid = fork();
    if(pid == 0) {
        sleep(30);
    } else if(pid > 0) {
        sleep(10);
    } else {
        perror("fork");
        return -1;
    }
    return 0;
}

主进程10s后退出,子进程30s后退出,通过ps查看情况(pstree -u -p | grep orphan)

  • 在主进程未退出时
    [root@iz2zecj7a5r32f2axsctb9z shell]# pstree -u -p | grep orphan
             |            `-sshd(9397)---bash(9399)-+-orphan(10187)---orphan(10188)
  • 主进程退出后
    [root@iz2zecj7a5r32f2axsctb9z shell]# pstree -u -p | grep orphan
             |-orphan(10188)
文档更新时间: 2021-03-06 12:38   作者:周国强