C++ 中的 fork and kill 崩溃 ubuntu

Fork and kill in C++ crashes ubuntu

我的一小段代码有问题。

void setTimeout(int time)
{
    if (fork() == 0) {
        pid_t id = getppid();
        sleep(time);
        if(kill(id, 0) == ESRCH)
            return;
        cerr << "Time out!" << endl;
        kill(id, TIMEOUT);
        return;
    }
}

当父进程是 运行 并且我不需要杀死他时,什么也没有发生并且它应该关闭,但是如果父进程在超时之前结束,ubuntu 会崩溃。

感谢您的宝贵时间。

父进程终止后,getppid 将 return 启动它的 shell 的进程 ID。所以你正在杀死 shell,这就是你掉到登录屏幕的原因。

另请参阅:

getppid() not returning parent's pid