目前的情况是,我启动了一个分叉的进程,过了一段时间它就会中止()
问题是fork和原始进程都打印到shell,但是在原始进程死掉之后,shell“返回”到提示符。
我想避免shell返回到提示符并保持好像进程没有死,让孩子处理那里的情况。
我正在试图弄明白该怎么做但是还没有,我的第一个猜测就是处理tty,但不确定它是如何工作的。
我忘了提一下,对于孩子的shell接管可以在fork-time完成,如果这样可以通过fd复制或一些重定向更容易。
答案 0 :(得分:2)
我认为您可能不得不使用第三个处理用户交互的流程,通过管道与“父”和“子”进行通信。
你甚至可以使它成为一个相当轻量级的包装器,只需将数据来回传递给父节点和终端,直到父节点消失,然后切换到传递给子节目/从子节点传递。
为了进一步增加,我认为你要遇到的根本问题是shell执行命令不会那样。 shell正在等同于调用system() - 它将等待它刚刚生成的进程死掉,一旦它出现,它将再次向用户显示提示。这不是一个真正的问题,它就是shell的工作原理。
答案 1 :(得分:1)
bash(我相信其他shell)有wait
命令:
wait: wait [n]
等待指定的进程并报告其终止状态。如果 没有给出N,所有当前活动的子进程都在等待, 并且返回码为零。 N可以是进程ID或作业 规格;如果给出了工作规范,那么工作中的所有流程都是如此 管道等待。
答案 2 :(得分:0)
您是否考虑过颠倒父母子女关系?
如果新进程死亡的顺序是可预测的,请运行将在“child”中中止的代码以及将在父进程中继续的代码。