现在我在Linux环境中遇到了一个问题。
情况如下: 程序A调用程序B,程序B调用程序C.
程序B使用nohup调用程序C,因此无论我们是否关闭程序B,程序C都可以在后台运行。
但现在的问题是如果后者没有停止,程序A将忙于等待程序C.
我知道当程序A调用程序B时我可以使用nohup,但它会导致程序A调用程序B并进入下一阶段而不等待程序B.
这是我想要的:程序A调用程序B =>程序B调用程序C =>通过UI关闭程序B,在后台运行程序C,最后程序A将进入下一阶段。
我该怎么办?这些程序是用TCL编写的。
非常感谢!
答案 0 :(得分:2)
最简单的事情可能是从程序B运行程序C,如下所示:
exec nohup tclsh programC.tcl >/dev/null </dev/null &
无论如何,您无法以任何有意义的方式与子流程进行交互,但这首先是您有效使用nohup
所获得的。
您也可以测试您是否确实需要nohup
;它可能足以做到这一点:
exec tclsh programC.tcl &
&
必须在最后;它告诉Tcl在后台运行子程序,这对你正在做的事情来说已经足够了。
要试验的另一件事是,如果您可以使用>@stdout <@stdin
作为重定向。他们不允许程序B与程序C交互,但他们可能会让用户这样做。