【发布时间】:2015-11-09 07:58:15
【问题描述】:
考虑以下代码,当父进程终止时,stdin控制被shell收回,除了通过“ps -e”命令外,没有办法看到子进程正在运行。 有没有办法在父进程死亡之前将标准输入控制权交给子进程? 我在这里阅读了一些类似的主题,但没有一个可以解决这个问题。有人建议使用“#cat | ./a.out”作为解决方法,但如果有的话,我想要一个代码级解决方案。
pid = fork();
if( pid == 0)
{
while(1);
}
else
{
//wait(&childstatus);
printf("Hello From Parent\n");
}
【问题讨论】:
-
你需要这个做什么?你不能简单地切换进程,让孩子死而父母继续吗?
-
该代码只是一个示例,我特别不需要此代码。我服用一般。如果父母创建了一个孩子并做了一些事情,那么当孩子还在做其他事情时,它就结束了。父母如何在父母去世后让其孩子拥有对stdin的控制权以完成其执行,而无需父母等待孩子完成?有什么办法吗?
-
我发现你的问题很有趣,从这篇文章中可以猜到你想要的东西是不可能的stackoverflow.com/questions/8319484/…。但是,进一步阅读我还发现了另一个:unix.stackexchange.com/questions/152379/…,关于 prctl() 命令(来自 linux 内核 3.4),它扩展了子进程的可能性,但仍然没有做你真正想做的事情。
-
听起来不错。如果我们可以通过 shell 而不是 init 进程为孩子重新做父母。但是正如您所说,这对标准输入的所有权没有任何改变。谢谢
-
@user3480226 你不能让孩子被 shell 重新抚养。相反,让父母
wait()直到孩子完成。