【问题标题】:stdin control is not given to the child after the parent death父母去世后不给孩子 stdin 控制权
【发布时间】: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() 直到孩子完成。

标签: c fork stdin


【解决方案1】:

是的,这就是 shell 的工作方式。如果您不希望 shell 占用活动进程组,请保持父进程处于活动状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2020-05-26
    • 1970-01-01
    • 2013-06-04
    • 2022-08-03
    • 1970-01-01
    相关资源
    最近更新 更多