2013-06-27 25 views
3

我必須創建一個啓動一定數量的並行作業(另一個腳本)的腳本(ksh或perl),它們中的每一個作爲單獨會話中的前臺進程運行。另外,我開始監視作業,必須確定是否有任何腳本需要操作員輸入,並在必要時切換到相應的會話。 我的問題是,我還沒有找到一個好方法來確定該過程正在期待輸入。對於後臺進程來說非常簡單:進程狀態爲「停止」,這可以通過'ps'命令輕鬆檢查。在前臺進程的情況下,這是行不通的。 到目前爲止,我試圖用dbx或桁架來關注這個過程,看它是否掛在'讀'上,但這種方法看起來太重了。 你能提出一些更好的解決方案嗎? Perl,shell,C,Java等等,只要它是標準的,並且不需要額外安裝第三方或操作系統特定的東西。如何檢測前臺進程在UNIX中等待輸入?

謝謝。

+2

粗略的方法是在strace&monitor下從stdin(fd == 0)讀取()來運行它。 – anishsane

回答

3

你所要求的是不可能的,至少不可靠。該過程可能使用select或其他輪詢方法,而不是在read呼叫上阻塞。你無法知道它是在等待操作員輸入還是在忙於做其他的事情,並且一般來說它可能是(在對操作員輸入作出響應的同時在後臺執行任務)。

程序發出等待操作員輸入信號的正常方式是打印提示。因此,如果自上次提供輸入時顯示提示,則應該將會話視爲活動會話。

如果你的程序不這樣做,你需要找到一些其他程序特定的方式來知道這些進程正在等待輸入。