2011-10-11 62 views
2

我編輯代碼和LaTeX,並喜歡定期編譯,以檢查編輯是否正在做我想做的。我通常運行一個看起來像是「while true; do make -s foo.pdf; sleep 2; done &」的小bash命令行,然後編輯foo.tex並將結果重新加載到xpdf中以檢查它。每次我保存我的編輯時,腳本都會生成pdf,我可以檢查編輯是否按照他們的要求進行了操作。然而,在我做了幾個這樣的事情之後,結束我的編輯並繼續前進,我有這些仍在運行的小腳本,並且我開始的每個xterm都可能被關閉。 ps只顯示腳本的睡眠部分,使得很難知道啓動它的正確父項。我怎麼知道我看到的所有睡眠中的哪個父母是要殺的人,即如何判斷哪個睡眠與我所做的make foo相關聯?如何識別正在運行的bash腳本?

+1

William發表了有用的評論,然後再次將其刪除!我希望他能把它放回去!他的評論幫助我找到了我的問題的答案,並且我想將它投票,但它已經不存在了!如果我真的是'bash -c';做make -s fah.ps; sleep 21; done'',那麼bash命令會在ps中標識它自己!我不應該從終端bash啓動腳本,而應該從命令行啓動一個bash命令來生成命令! – ChrisDR

回答

0

如果我是bash -c "while true; do make -s foo.ps; sleep 2; done",那麼ps顯示的bash命令命令具有我需要標識腳本的文件名。所以,不要直接從終端命令行運行腳本,我應該在命令行中使用命令啓動bash!感謝威廉(我認爲這是Pursell),他的帖子讓我想到了正確的路線! Mnm Cee建議使用適當的pid作爲鎖定文件,但創建這個文件需要比在命令行上輕鬆完成的更多的輸入。可能必須編寫一個單獨的函數,然後調用它。

1

您可以使用pstree或'ps -afjx',它們都顯示進程樹,這可以很容易地識別父進程。

您還可以將父PID打印到每個腳本中的tmp文件中 - 並在腳本完成後刪除該文件。

+0

我可以很容易地識別父母,因爲他們在運行過程中顯示。我希望能夠看到與睡眠相關的待處理或過去的處理,這些處理沒有,或者至少我不知道如何看待它們。 – ChrisDR

+0

顯然,在創建它們之前您無法看到「待處理」進程,也無法在它們死後看到「過去」進程。但是,您可以在'ps'列表中看到每個進程的父進程ID – 2011-11-16 13:38:30

1

如果您經常使用該scriptlet,請將其放入腳本中。然後,您可以在進程列表中標識腳本名稱。

0

在您輸入命令的shell中,只需輸入jobs,while循環應顯示在列表中。假設括號中的作業號碼是3,然後輸入kill %3來殺死它。

或者,在您的ps標誌中包含jps j可能是最方便的,因爲它也會選擇BSD默認選擇的所有進程都有終端),請注意進程組ID(PGID),例如1234 ,然後做kill -- -1234