2010-06-18 66 views
1

當前場景中,我啓動了一個fork過程,並在一段時間後中止()。
問題是fork和原始進程都打印到shell中,但是在原始進程死亡後,shell會「返回」提示符。
我想避免shell返回提示並保持進程沒有死,讓孩子處理那裏的情況。在中止之前將shell傳遞給孩子

我想弄清楚如何做到這一點,但什麼都沒有,我的第一個猜測是圍繞tty處理,但不知道如何工作。

我忘了提及,如果通過fd複製或某些重定向,可以在fork時間完成對子進程的shell接管。

回答

2

我想你可能不得不採用第三個處理用戶交互的過程,通過管道與「父」和「子」進行通信。

你甚至可以使它成爲一個相當輕量級的包裝器,只是將數據來回傳遞給父代和終端,直到父代死亡,然後切換到傳入/傳出孩子。

爲了進一步補充一點,我認爲你要面臨的基本問題是shell執行命令不會那麼奏效。這個shell相當於調用system() - 它將等待它剛生成的進程死掉,一旦它結束,它將再次向用戶提示一個提示。這不是一個真正的問題,它是外殼的工作原理。

0

您是否考慮過顛倒父母子女關係?

如果新進程將死的順序是可預測的,請運行將在「子」中停止的代碼以及將在父進程中繼續的代碼。

+0

不,它不可預測,我只是簡化了場景,但我需要有效地將shell「提示」傳輸給孩子,並且可能孩子需要再次傳輸它。 – 2010-06-18 23:26:10

+1

另一個美麗的理論被一個不方便的事實淹沒在火焰中。 – dmckee 2010-06-18 23:29:53

1

慶典(我相信其他shell)有wait命令:

wait: wait [n]

等待指定的進程並報告其終止狀態。如果未提供 N,則等待所有當前活動的子進程, 並且返回碼爲零。 N可以是進程ID或作業 規範;如果給出了工作規範,則等待作業的所有進程 。

相關問題