監控程序結束 - Linux

Table of Contents

不知道用什麼關鍵字,找了一陣子了,
才上來問...如果這問題太蠢了請鞭小力點 Orz


我想要監控程序結束執行與否,來決定要不要繼續執行下一批資料

舉個例子:
$ matlab (程序) &

我用 for + if 控制開超過十個就暫停 (sleep)
但程式執行的時間很難抓,如果暫停的時間太短會大當機。

而程序每次都是自動開的,不會先知道 PID
我也沒辦法靠查詢 ps 去看有沒有結束(是嗎)?

請各位指教我該怎麼監督他是否執行完畢?

--

All Comments

Lily avatarLily2013-10-20
我是 CentOS
Belly avatarBelly2013-10-22
ps -A|grep matlab|wc -l 抓數量?
Isla avatarIsla2013-10-26
寫過類似功能的 script,就是用樓上那樣抓數量
Mary avatarMary2013-10-28
然後每幾秒就抓一次數量,小於某值才繼續開
Ina avatarIna2013-10-30
會寫C嗎? 用C寫個小的主程式負責run需要數量的matlab,然後
Linda avatarLinda2013-10-30
處理 SIGCHLD 就知道有matlab跑完了,再決定後續動作
Elma avatarElma2013-11-01
sorry I don't know C, I'll try 2nd & 3rd floor's
Kumar avatarKumar2013-11-02
way ! thank for all of you !
Tristan Cohan avatarTristan Cohan2013-11-05
shell(ex.bash)也可以trap signal啊
Dora avatarDora2013-11-09
bash的 $! 可以抓前一個丟到背景的pid
Brianna avatarBrianna2013-11-14
要處理多個child process結束SIGCHLD需要精確的signal
George avatarGeorge2013-11-19
handling(例如signal block), 才不會signal lost,我不確定
Kumar avatarKumar2013-11-23
bash有沒有sigblock(.)對應的相關功能,還要bitwise or 來
Joe avatarJoe2013-11-23
產生sigmask等,還是用c比較簡單
Delia avatarDelia2013-11-27
需不需要考慮別人也跑 matlab, 或 matlab 再 fork 出 matlab?
Daph Bay avatarDaph Bay2013-11-28
如果答案為是, 那就應使用 ps 算數量的方式. 如果答案為否,
Anonymous avatarAnonymous2013-12-02
那就用 for 產生十個背景的 while sub-shell, matlab 直接跑:
Franklin avatarFranklin2013-12-06
for ...; do (while true; do matlab; done) & done
Necoo avatarNecoo2013-12-10
這樣應該就沒有 SIGCHLD 或抓背景 pid 的問題.
Andrew avatarAndrew2013-12-13
如果別人也需要跑,大家的總和是N,更需要用c,用ps之類方式,
Hardy avatarHardy2013-12-17
會有race condition,用c的話可以用semaphore來確保總數量
Bennie avatarBennie2013-12-21
我因為以前常處理這類race condition問題,所以習慣使用一
Delia avatarDelia2013-12-24
開始看來似乎overkill的方式,但其實是最安全正確的方式
Thomas avatarThomas2013-12-24
想一想樓上說的方式還是最仔細,不過如果因為 racing
Leila avatarLeila2013-12-25
而多開一兩個或許倒也無妨,那就還是用 shell 比較
簡單
John avatarJohn2013-12-27
我昨天實測遇到更白爛的狀況:開FSL (我做影像的)
結果他某個指令在不同階段會叫出不同程式
所以會 被偵測到 => 不見了 !
Jack avatarJack2013-12-29
於是 ps -A|grep 法讓我的程序瞬間暴增破百 Orz
Christine avatarChristine2014-01-03
感謝樓上各位詳細解釋 我其實看不太懂 試著寫看看:)
Olga avatarOlga2014-01-07
jobs可以看現在還有多少活著的child
Catherine avatarCatherine2014-01-07
jobs還是會有race condition,你剛看完說不定又多死了n個
Jake avatarJake2014-01-08
用semaphore控制總量,那就要確保大家都這麼跑,不然還是沒用.
Genevieve avatarGenevieve2014-01-12
另外,以原po的問題,避免多生n個才是重點,多死了n個無關當機.
Wallis avatarWallis2014-01-12
原po的 "瞬間暴增破百",如果不會造成什麼問題,也不用太care.
Jack avatarJack2014-01-13
多user又要控制數量,本來就要follow統一架構,其實最好的架
Wallis avatarWallis2014-01-15
構是priority queue+單一負責執行的主程式,大家把job命令
Emma avatarEmma2014-01-17
丟進queue.不過這是題外話,回到多生少生問題,會少生當然也
Gary avatarGary2014-01-21
會多生(多人狀況下),兩個user接近同時發現多出n個容許數量
然後都各執行了n個,就會多出了n個.隨著(接近)同時做這樣事
Franklin avatarFranklin2014-01-22
的user增加,結果就是數量失控. race condition 本來就很討
厭,多無法容許,也只能靠標準做法解決,沒有偷懶步.當然如果
Candice avatarCandice2014-01-27
數量控制本來就不嚴格要求,那就真的隨便了,反正race cond
ition發生低率也不高,就看需求怎麼要求就是了
Xanthe avatarXanthe2014-02-01
若無法容許
機率
Yedda avatarYedda2014-02-05
樓上b大不需要把問題複雜化. 原po的情況,如果是個人電腦,
Rachel avatarRachel2014-02-06
就不需要考慮 "還有別人" 的情況; 如果是公用電腦,
Doris avatarDoris2014-02-06
除非是管理者之類, 否則也很難要求別人用 "統一架構".
Ula avatarUla2014-02-07
再者, 我別述的 "多死了n個無關當機" 是指上面提jobs的情況,
Todd Johnson avatarTodd Johnson2014-02-07
這種情況, 除非自己寫錯處理方式, 只會有多死不會有多生.
前述
Elvira avatarElvira2014-02-12
考慮別人也要跑matlab 是 10/20 10:57 你的推文先說的
我只是順著寫下來,怎麼變成是我把問題複雜化了呢 XD
Rachel avatarRachel2014-02-13
如果是單位內大家共用,不遵守的就不準用,系統本來就是這樣
管理的
Oscar avatarOscar2014-02-17
另外個人電腦若執行多個主程式,就相當於別人也要用的情況,
只是這個別人變自己的另一個shell
Kumar avatarKumar2014-02-20
如果是公用電腦,原po不是管理員或有權制定政策者,最多只能
Anonymous avatarAnonymous2014-02-21
建議可行方案就是了. 最後我不認為把問題分析清楚是複雜化
,我前面也說了,需求規格要求不嚴,本來就怎麼做都可以,反正
Regina avatarRegina2014-02-25
發生機率不高
Victoria avatarVictoria2014-02-28
b大,不好意思沒說清楚. 那段推文雖然提到別人跑,但只簡單帶過,
Xanthe avatarXanthe2014-03-05
其實是假設原po的環境為否的情況 :P
Selena avatarSelena2014-03-06
否則若是公用電腦,可能不光只是執行matlab的問題,
Regina avatarRegina2014-03-07
可能還有別的應用程式; 又比如每個人用matlab執行的工作,
Elizabeth avatarElizabeth2014-03-12
不盡相同, 對系統資源的需求可能有的很多有的很少,
Tracy avatarTracy2014-03-15
上述各種考慮是否還有別人之類的問題解法,大概都很容易破功 :P
Hedwig avatarHedwig2014-03-16
也就是說, 真要考慮多人的情況, 可能就不只是數量問題,
Hedy avatarHedy2014-03-16
比方單獨執行時, user a 的 A 程序最多跑 10 個, 再多會當;
Erin avatarErin2014-03-19
而 user b 的 B 程序, 最多 5 個; 那兩人同時丟上去跑的話,
Rae avatarRae2014-03-20
顯然單算總量都會有問題, 還得對各個程序做些加權計算之類,
Linda avatarLinda2014-03-23
使得達到A已跑4隻時,B只能最多只能跑3隻之類...
Edward Lewis avatarEdward Lewis2014-03-26
但這類複雜情況, 我想應不是原po問題的本意.
Rosalind avatarRosalind2014-03-29
(而且往往是當機幾次後,才知道跑幾個會當機XD)
Todd Johnson avatarTodd Johnson2014-04-03
是公用電腦,很多人有跑Matlab,我自己也是admin,
Elizabeth avatarElizabeth2014-04-07
我們都不是EECS,所以都是靠講好誰要開始跑大程式協
調的,感謝各位推文,我覺得這是我們未來(有助理)之
Christine avatarChristine2014-04-09
後可以努力的方向Orz
Brianna avatarBrianna2014-04-12
其實這類情況, 靠人工協調後, 自行用簡單的方式進行控管,
Candice avatarCandice2014-04-14
也就夠了. 弄成複雜的樣子再用程式處理, 還不見得管用.
Thomas avatarThomas2014-04-17
前面有說,最佳solution是大家把job命令列丟到queue,由單一
Vanessa avatarVanessa2014-04-21
程式做類似scheduler工作才是最佳solution.甚至可以考慮
priority/loading 等條件
Jessica avatarJessica2014-04-26
以前台大的cray超級電腦就是這樣,我早上丟job進去,傍晚去
Charlie avatarCharlie2014-04-29
看,沒任何動靜(發現是day SRU用完),後來半夜被執行,沒幾下
就跑完了(在sun工作站要跑好幾天)
Freda avatarFreda2014-05-01
有沒有考慮在執行的程序最後加入寫入文字檔?
監控這個檔案就知道跑完沒
Harry avatarHarry2014-05-04
b大, 您上述的 "單一程式" 在 Linux 其實就是 kernel.
Zenobia avatarZenobia2014-05-04
原po的 "大當機", 我認為是系統記憶體不足,而大量進行swap,
Wallis avatarWallis2014-05-06
慢到令人無法忍受地慢; 但超級電腦,一方面有極大量的記憶體
Mia avatarMia2014-05-08
(可能十T或百T以上等級),另一方面也做記憶體的資源控管,
Margaret avatarMargaret2014-05-09
當然沒機會遇到記憶體不足的 "當機".
Ivy avatarIvy2014-05-11
當然相比之下, 一般機器資源少, Linux 的 kernel 也很陽春.
Skylar Davis avatarSkylar Davis2014-05-15
就算控制 job 數量, 還是無法保證記憶體使用量.
Sierra Rose avatarSierra Rose2014-05-18
Kernel的schedule和AP層級考量的重點不同. AP人可以決定哪
Jake avatarJake2014-05-18
些白天run,哪天夜晚run,哪些第一優先run其它先suspend掉等
Kelly avatarKelly2014-05-18
等.這些在以前迷你電腦年代確實做在OS,但在Unix時又簡化掉
了.原因就是把這種事交還給AP team
Catherine avatarCatherine2014-05-23
當然以上可以用指令去控制,但那還是需要人去操作指令,所以
一旦有這樣子的需求,自然又會寫成AP層級的管理系統
Dora avatarDora2014-05-24
另外throughput絕對不是在當掉前才從最高往下突降到0的,要
Ula avatarUla2014-05-24
throughput最佳化,不能只用當不當掉這個標準.
Doris avatarDoris2014-05-28
後續推文已經脫離原po目前權限及資源能考量的情況,我就先
討論到這裏好了
Rachel avatarRachel2014-06-01
b大說得是,但仍需kernel配合,AP層級才有辦法做某些精細的控管.
Callum avatarCallum2014-06-02
又,雖不是突降到0,但以程序數量的角度,也只能知道再加一就當.
George avatarGeorge2014-06-04
樓上,那就是cgroup了吧? AP queue可以試試看openpbs
Yuri avatarYuri2014-06-06
flock ?
Heather avatarHeather2014-06-10
回樓上上k大,其實cgroup和pbs都只是聞其名,不曾進一步了解:P
Necoo avatarNecoo2014-06-13
不知cgroup可否在多個程序總合超出資源限制時,暫停某程序,
Jacky avatarJacky2014-06-15
待資源足夠時再繼續之類? 另外 pbs 是否有跟 cgroup 做結合?
Robert avatarRobert2014-06-17
^ 甚至進一步 swapout 出記憶體, 待...