我有一個腳本必須啓動2個獨立進程,並等到其中一個完成後再繼續。Perl系統(),exec()和與LSF的交互
到目前爲止,我已經通過創建一個具有if fork pid == 0, exec, else wait
的進程來運行它。另一個是使用system
和命令行創建的。
現在我準備推出這個腳本,在Platform Load Sharing Facility(LSF)上運行這樣的工作對進程的400次迭代,但是我關心穩定性。我知道這些進程可能會崩潰。在這種情況下,我需要一種方法來知道進程崩潰的時間,並且終止它的對進程和主腳本。
本來我寫了一個3分鐘看守期的看門狗,如果3分鐘不活動通過,它會殺死進程。然而,這引起了很多誤報,因爲當LSF暫停兩個過程中的一個時,監督人員將它們視爲不活動。
在LSF中,當我發佈作業時,我可以選擇殺死它們。但是,當我殺了一份工作時,我究竟殺了什麼?終結會殺死Perl腳本創建的兩個進程嗎?或讓他們像殭屍一樣運行?
要重申,
會殺死對LSF隊列中的作業也會殺死每一個作業已創建的過程?
什麼是最好(最安全?)的方式來從Perl腳本生成兩個獨立的進程,並等待其中一個退出之前繼續?
如何編寫一個能夠區分進程崩潰的進程和由LSF管理員暫停的進程的看門狗?
LSF如何掛起/恢復?我認爲它是通過'SIGSTOP'和'SIGCONT'? 「 – Sobrique
」默認的操作是將以下信號發送到作業: SIGTSTP用於並行或交互式作業。SIGTSTP被主進程捕獲並傳遞到在其他主機上運行的所有從進程 SIGSTOP用於順序作業SIGSTOP不能被用戶程序捕獲,SIGSTOP信號可以通過lsf.conf中的LSB_SIGSTOP參數進行配置。「 從LSF的「作業控制」。我想知道在這種情況下,「奴隸進程」的含義是否指原始作業生成的進程 –