【问题标题】:How to detect that foreground process is waiting for input in UNIX?如何检测前台进程正在等待 UNIX 中的输入?
【发布时间】:2023-03-25 21:20:01
【问题描述】:

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

谢谢。

【问题讨论】:

  • 一种粗略的方法是在 strace 下运行它并监控从标准输入(fd==0)读取()。

标签: shell unix ksh


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-08-09
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    相关资源
    最近更新 更多