1
A
回答
1
您可以輕鬆地識別子進程,例如,使用像pstree
工具(這是使人類可讀的輸出非標準程序)。
~ $ pstree -ps "$PPID"
init(1)───tmux(9707)─┬─bash(9708)─┬─bash(9742)───trayer(9743)
│ └─weechat-curses(10594)
├─bash(10729)───su(10746)───bash(10752)───vim(10761)
├─bash(10818)───ksh(1748)
├─bash(15133)───pstree(15474)
├─bash(17879)───man(15076)───sh(15079)───sh(15080)───vimmanpager(15084)───vim(15088)
├─bash(17900)───su(17917)───bash(17922)
├─bash(20076)───man(20095)───sh(20098)───sh(20099)───vimmanpager(20103)───vim(20109)
├─bash(20116)───man(20135)───sh(20138)───sh(20139)───vimmanpager(20143)───vim(20147)
└─tmux-mem-cpu-lo(15472)
如果需要的原始數據,至少在Linux下,你可以通過/proc/<pid>/stat
遞歸爬行。您也可以使用ps
,但解析其輸出並不是我喜歡做的事情。
但是你的問題是「你能識別由shell創建的所有進程嗎?」。技術上,不。如果您使用disown
或使用nohup
運行,並且尤其是在父進程死亡的情況下,則子進程可能成爲init
的子進程,並且與另一個進程分叉的進程無法區分。
這種情況下的解決方案是特定於平臺的。如果你已經在內核中建立了支持,你可以在Linux下使用cgroups。我相信BSD的等價物被稱爲「監獄」。
此外,如果您嘗試將跟蹤進程作爲腳本的一部分,而不是開發和測試以外的原因,則應該使用正確的process management。不應該在腳本中使用ps
。
相關問題
- 1. 執行上./不SH
- 2. 創建.sh文件來執行visual studio 2010項目
- 3. fork()創建的進程不會並行執行
- 4. Heroku創建了十幾個sh和ruby進程
- 5. 確定執行用戶的NT組的Java進程
- 6. iPhone:創建另一個線程並執行一些進程
- 7. 如何創建罐並執行正確
- 8. PHP執行SH文件
- 9. phantomjs PHP執行sh文件
- 10. 無法執行./sh文件
- 11. 確定Java程序的確定性線程執行
- 12. 創建一個在C#中執行powershell但失敗的進程
- 13. 創建一個新的進程來執行ls命令
- 14. 動態創建按鈕確定但它的事件處理程序不執行?
- 15. 確定映射程序的執行
- 16. SH -c和進程替換
- 17. Xcode 4:自定義行爲不執行我的sh腳本?
- 18. 創建Sh和Bin文件以執行文件夾中的所有SQL腳本
- 19. 確定文件是否表示可執行進程
- 20. 在當前jar中創建java進程來執行類
- 21. C#Windows服務創建進程,但不執行它
- 22. 如何用C++創建一個進程來執行exe?
- 23. 確定哪個進程在Windows中創建共享內存
- 24. 線程創建(分離)從未執行
- 25. 創建延遲執行程序
- 26. 創建可執行的JAR
- 27. 在特定目錄中執行進程
- 28. Cron執行一個執行python腳本的sh腳本
- 29. 使用多處理進程()進行並行執行的正確方法
- 30. 創建非創建子進程的進程
on unix(SunOS)你可以使用ptree – 2012-07-26 07:30:21
你的腳本在做什麼?如果它沒有長時間運行或在後臺運行,那麼你不能在ps命令輸出中看到它們,因爲它只會運行並退出進程。 – Satish 2012-08-23 20:43:36