用C ++进行分叉和杀死会使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将返回启动它的shell的进程ID。因此,您正在杀死外壳程序,这就是为什么您要进入登录屏幕。

也可以看看:

getppid()不返回父母的pid

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章