我編輯代碼和LaTeX,並喜歡定期編譯,以檢查編輯是否正在做我想做的。我通常運行一個看起來像是「while true; do make -s foo.pdf; sleep 2; done &」的小bash命令行,然後編輯foo.tex並將結果重新加載到xpdf中以檢查它。每次我保存我的編輯時,腳本都會生成pdf,我可以檢查編輯是否按照他們的要求進行了操作。然而,在我做了幾個這樣的事情之後,結束我的編輯並繼續前進,我有這些仍在運行的小腳本,並且我開始的每個xterm都可能被關閉。 ps只顯示腳本的睡眠部分,使得很難知道啓動它的正確父項。我怎麼知道我看到的所有睡眠中的哪個父母是要殺的人,即如何判斷哪個睡眠與我所做的make foo相關聯?如何識別正在運行的bash腳本?
回答
如果我是bash -c "while true; do make -s foo.ps; sleep 2; done"
,那麼ps
顯示的bash命令命令具有我需要標識腳本的文件名。所以,不要直接從終端命令行運行腳本,我應該在命令行中使用命令啓動bash
!感謝威廉(我認爲這是Pursell),他的帖子讓我想到了正確的路線! Mnm Cee建議使用適當的pid作爲鎖定文件,但創建這個文件需要比在命令行上輕鬆完成的更多的輸入。可能必須編寫一個單獨的函數,然後調用它。
您可以使用pstree或'ps -afjx',它們都顯示進程樹,這可以很容易地識別父進程。
您還可以將父PID打印到每個腳本中的tmp文件中 - 並在腳本完成後刪除該文件。
我可以很容易地識別父母,因爲他們在運行過程中顯示。我希望能夠看到與睡眠相關的待處理或過去的處理,這些處理沒有,或者至少我不知道如何看待它們。 – ChrisDR
顯然,在創建它們之前您無法看到「待處理」進程,也無法在它們死後看到「過去」進程。但是,您可以在'ps'列表中看到每個進程的父進程ID – 2011-11-16 13:38:30
如果您經常使用該scriptlet,請將其放入腳本中。然後,您可以在進程列表中標識腳本名稱。
在您輸入命令的shell中,只需輸入jobs
,while循環應顯示在列表中。假設括號中的作業號碼是3,然後輸入kill %3
來殺死它。
或者,在您的ps標誌中包含j
(ps j
可能是最方便的,因爲它也會選擇BSD默認選擇的所有進程都有終端),請注意進程組ID(PGID),例如1234 ,然後做kill -- -1234
。
- 1. Bash腳本無法識別「&」
- 2. 如何正確sigint從另一個bash腳本運行的bash腳本?
- 3. 如何在bash腳本中運行sqlite3?
- 4. 如何在代碼中識別正在運行的express.js版本?
- 5. PHP:如何識別日誌中正在運行的腳本實例?
- 6. 如何在bash腳本中串行運行sql腳本?
- 7. 在bash中運行腳本
- 8. 如何識別ColdFusion下正在運行的jar版本
- 9. 如何知道bash腳本是否正在運行nohup?
- 10. QTP:如何識別腳本運行時創建的對象?
- 11. awk的運行bash腳本
- 12. 運行python腳本的Bash腳本
- 13. 並行運行bash腳本?
- 14. 並行運行bash腳本
- 15. 如何從Java運行bash腳本
- 16. 如何爲Scala運行Bash腳本
- 17. 如何從magento運行bash shell腳本?
- 18. 如何通過Rails3運行Bash腳本?
- 19. 如何運行bash腳本時LIUNX
- 20. 如何\ n識別在bash
- 21. 運行一個PHP腳本,運行一個運行bash腳本的Python腳本,掛在bash上
- 22. 在bash腳本中運行兩個正在執行的命令
- 23. 如何識別bash腳本中的哪個操作系統
- 24. 在運行時識別python腳本行中的函數調用
- 25. 如何在運行不同程序時運行bash腳本?
- 26. Windows上的Ubuntu上的bash Linux,文件夾識別和運行Python腳本
- 27. 從PHP腳本運行bash腳本
- 28. Bash腳本運行php腳本
- 29. 從R腳本運行bash腳本
- 30. 運行bash腳本會
William發表了有用的評論,然後再次將其刪除!我希望他能把它放回去!他的評論幫助我找到了我的問題的答案,並且我想將它投票,但它已經不存在了!如果我真的是'bash -c';做make -s fah.ps; sleep 21; done'',那麼bash命令會在ps中標識它自己!我不應該從終端bash啓動腳本,而應該從命令行啓動一個bash命令來生成命令! – ChrisDR