4

我必须创建一个脚本(ksh 或 perl)来启动一定数量的并行作业(另一个脚本),它们每个都在单独的会话中作为前台进程运行。另外,我开始监视工作,该工作必须确定这些脚本中的任何一个是否需要操作员的输入,并在必要时切换到相应的会话。我的问题是我还没有找到一个好的方法来确定该过程是否需要输入。对于后台进程,这很简单:进程状态是“停止”的,这可以通过“ps”命令轻松检查。在前台进程的情况下,这不起作用。到目前为止,我尝试使用 dbx 或 truss 附加到该进程以查看它是否挂在“读取”上,但这种方法似乎过于重量级。你能提出一些更好的解决方案吗?Perl、shell、C、Java 等

谢谢你。

4

1 回答 1

3

你问的是不可能的,至少不可靠。该进程可能正在使用select或其他轮询方法,而不是阻塞read调用。您无法知道它是在等待操作员输入还是忙于做其他事情,一般来说它可能是两者(在响应操作员输入的同时在后台做事情)。

程序发出正在等待操作员输入信号的正常方式是打印提示。因此,如果会话自上次输入后显示提示,则应认为会话处于活动状态。

如果您的程序不以这种方式运行,您将需要找到一些其他特定于程序的方式来了解这些进程正在等待输入。

于 2013-07-02T18:13:13.443 回答