相关疑难解决方法(0)

是否有任何 UNIX 变体可以让子进程与其父进程一起死亡?

我研究 Linux 内核行为已经有一段时间了,我一直很清楚:

当一个进程终止时,它的所有子进程都会返回给该init进程(PID 1),直到它们最终终止。

然而,最近,一个比我在内核方面更有经验的人告诉我:

当一个进程退出时,它的所有子进程也会死亡(除非你NOHUP在这种情况下使用它们返回到init)。

现在,即使我不相信这一点,我仍然编写了一个简单的程序来确保它。我知道我不应该依赖时间 ( sleep) 进行测试,因为它完全取决于进程调度,但对于这个简单的情况,我认为这已经足够了。

int main(void){
    printf("Father process spawned (%d).\n", getpid());
    sleep(5);

    if(fork() == 0){
        printf("Child process spawned (%d => %d).\n", getppid(), getpid());
        sleep(15);
        printf("Child process exiting (%d => %d).\n", getppid(), getpid());
        exit(0);
    }

    sleep(5);
    printf(stdout, "Father process exiting (%d).\n", getpid());
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

这是程序的输出,ps每次printf通话时都有相关的结果:

$ ./test &
Father process spawned (435).

$ ps -ef | grep test
myuser    435    392   tty1 …
Run Code Online (Sandbox Code Playgroud)

process fork exit init

49
推荐指数
2
解决办法
2万
查看次数

如何同时杀死进程和子进程?

我问 了一个问题,想知道如何从 Python 的 subprocess 模块中获取多行消息。

问题是在测试过程中,我不得不杀死运行gnuchess进程的python进程。在命令行中使用 ^c 似乎会杀死 python 进程,但不会杀死 gnuprocess。

为了杀死 gnuchess,我使用ps aux获取 pid | grep gnuchess并运行kill -9 PID。是否有其他方法可以同时杀死 python 和 gnuchess 进程?

process kill

9
推荐指数
1
解决办法
1万
查看次数

标签 统计

process ×2

exit ×1

fork ×1

init ×1

kill ×1