簡體   English   中英

等待子進程的一部分完成?

[英]Wait for part of child process to finish?

我有一個分叉出現在循環中,在分叉上方,我提示用戶輸入。 在我的分叉過程中,還有一些印刷。 因為不能保證流程的執行順序,所以我經常(或始終)從子流程打印中得到提示,提示行是用戶和用戶可以輸入信息的地方。

即,我得到這樣的東西:

Enter info: <OUTPUT FROM CHILD>
_

(其中_表示用戶可以自由輸入輸入。)

由於我試圖允許父進程派生同時運行的許多子進程(每個子進程都基於用戶提供的信息),因此我無法等待子進程終止后再繼續父進程。 有沒有辦法讓父母在繼續前進之前等待孩子的一部分完成?

在很大程度上取決於您實際上要執行的操作,但是您不能使用waitpid()wait()等待進程的一部分完成。 等待函數系列等待垂死的進程或由於信號而停止的進程(SIGSTOP,SIGTTIN,SIGTTOU等)。

一些問題:

  • 子進程的輸出應該發送到屏幕上,導致這種混亂,還是應該發送到文件?
  • 或者,該程序是否應該從每個孩子那里得到一個管道,以便它可以方便地讀取孩子的輸出並將其顯示在屏幕的適當位置?
  • 或者,在窗口化環境中,是否應該將子級消息發送到其他窗口(例如控制台窗口)?
  • 還是孩子應該寫到syslog守護程序?
  • 還是應該讓孩子掛在SIGTTOU信號上?

在很大程度上取決於消息的目的以及消息即時顯示的重要性。

其他答案肯定更通用,解決此問題的正確方法將涉及某種管道,但是我的情況實際上非常簡單,只需要父級等待一會兒,因此我添加了usleep()行,使父母等待幾毫秒讓孩子完成打印。 絕對不是完美的,但是確實有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM