如何检测前台进程正在等待UNIX中的输入?

时间:2013-06-27 12:49:35

标签: shell unix ksh

我必须创建一个脚本(ksh或perl)来启动一定数量的并行作业(另一个脚本),每个脚本都在一个单独的会话中作为前台进程运行。另外,我开始监视作业,必须确定是否有任何脚本需要来自操作员的输入,并在必要时切换到相应的会话。 我的问题是我没有找到一个很好的方法来确定进程是否期望输入。对于后台进程,它非常简单:进程状态“停止”,可以使用'ps'命令轻松检查。在前台处理的情况下,这不起作用。 到目前为止,我尝试使用dbx或truss附加到进程,看看它是否挂在'read'上,但这种方法看起来太重了。 你能建议更好的解决方案吗? Perl,shell,C,Java等......只要它是标准的,并且不需要额外的第三方或特定于操作系统的东西来安装。

谢谢。

1 个答案:

答案 0 :(得分:3)

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

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

如果你的程序没有这种方式,你需要找到一些其他程序特定的方法来知道这些进程正在等待输入。