c - 通过杀死其父进程而成为孤儿的子进程不会被 init 收养。我该如何解决?

标签 c linux unix process system

该程序是通过 fork 两次来避免僵尸。我得到了孤儿进程的父 pid 的值,除了 1,这是不对的。

这是我试过的代码。如果逻辑上有错误,请帮助我。

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

int main()
{
    pid_t processid;

    if((processid=fork())<0)
        printf("Fork error\n");
    else if(processid==0)
    {
        if((processid=fork())<0)
            printf("Fork error\n");

        if(processid>0)
        {exit(0);}

        sleep(2);
        printf("second child, parent pid =%d\n",getppid());
        exit(0);
    }
    exit(0);
}

这是我得到的输出:

root@kali:~# gedit avoidzombies.c
root@kali:~# gcc avoidzombies.c
root@kali:~# ./a.out
root@kali:~# second child, parent pid =1069

最佳答案

在我的系统上,我也得到了一个不同的 pid -- 但那个 pid 对应于 upstart,它是 init 的替代品。因此,它工作正常,但 init(替代)进程的 pid 不是 1。– Dmitri

关于c - 通过杀死其父进程而成为孤儿的子进程不会被 init 收养。我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37418226/

相关文章:

c - 为什么以下按位运算会返回意外结果?

c - 我需要制作一个 C 程序,它接受作为命令行参数传递的整数并打印总和

c++ - 在 Qt-Projekt 中加载 libavcodec

linux - 在 Google Colab 上运行 Docker

linux - 跟踪命令在 UNIX/LINUX 中花费的时间?

linux - 从 cat 加载变量到内存

c - 如何仅使用 ansi-c 在 Windows 计算机上连接 GPIB 设备

linux - 为什么 'ed' 在 linux 中也被命名为 'red'

linux - 使用 awk 删除重复行并仅打印文件中的最新行

CreateProcess + CREATE_SUSPENDED 标志在 Linux 中是否等效?