2011-03-10 20 views
0

我有一個Perl腳本,產生一些孩子。他們都需要相當長的時間才能運行,創建目錄和文件。在兒童死於自然原因之前,我經常會注意到我想要改變的事情,因此我必須關閉所有的東西(包括幾個grepkill調用),並刪除孩子創建的任何文件。這並不是什麼大不了的事情,但有點痛苦的脖子。我想創建一個設置,讓孩子們都受到監控,所以當我再次啓動父母時,仍會報告正在運行的老孩子。保持從腳本的舊運行跟蹤兒童

到目前爲止,我最好的想法是保持一個日誌文件,我已經用他們的PID運行的孩子,檢查它並在父腳本開始時更新它。殺死並報告任何仍在運行的孩子,並在用戶重新運行之前手動清理目錄和文件。

所以我的問題是這樣的:我該如何去添加孩子到日誌文件?有沒有辦法設置一個可以自動處理它的觸發器,或者我堅持要記住在新進程啓動的代碼中的任何地方執行它?

p.s.我當然願意提供更好的方法來達到這個目的!

+0

聽起來你已經準備好了[Parallel :: ForkManager](http://search.cpan.org/perldoc?Parallel:ForkManager)。 – Ether 2011-03-10 17:58:38

回答

0

signal handlers怎麼樣?父母可以跟蹤它已經啓動的作業的pid(並且如果你願意的話,已經用SIGCHLD處理程序獲得的pid)。當你想過早地終止一切,告訴父母要殺掉所有的孩子並在他們之後清理。如果子進程也是Perl腳本,則可以將信號處理程序放入子進程中,並查看它們是否會自行清理。

+0

我對此的擔憂是需要父母程序繼續運行以監控其子女。用戶可以啓動父腳本的另一個實例,然後開始運行孩子的新副本,但沒有意識到已經有一堆孩子正在運行。 – ajwood 2011-03-11 00:27:32