3
我的進程啓動了一個進程 - 在這個例子中它是一個shell,但它真的適用於任何進程。當shell創建新進程並獲得它們的PID時,我需要得到通知。如何持續監控Linux中的進程創建?
我可以在任何給定時間拍攝整個工藝樹的快照(當然,pstree
可以),但是如何監視具有給定PID的進程創建新進程?
- 監控網絡鏈路PROC接口:
到目前爲止,我已經找到了幾種方法在How to monitor an external process for events by its PID in C?其中沒有真正解決我的問題,這樣做。 問題:需要root權限,我沒有。
- 自定義庫覆蓋加載到shell進程的系統調用
LD_PRELOAD
。 問題:它也會被shell的子項繼承,而且我不想 - 我只想監視shell。 ptrace()
ing殼。 問題:通知父母(即我的進程)有關創建新進程的標誌,即PTRACE_O_TRACEFORK
,PTRACE_O_TRACEVFORK
和PTRACE_O_TRACECLONE
傳播給子進程,我只想監控shell。- 使外殼合作。 問題:在BASH中,命令回調(如在undistract-me中使用)非常黑客。我還希望避免使用特定於shell的代碼。
我覺得我在這裏錯過了一些簡單的東西。我覺得我可以讓上述解決方案之一與更多黑客,但是...當然,我不必訴諸如LD_PRELOAD
和ptrace()
大槍這樣一個簡單的任務,是嗎?
JFYI我在Vala編碼,但也歡迎C片段。
所以爲了記錄我不得不讓殼合作。 ZSH在http://zsh.sourceforge.net/Doc/Release/Functions.html中記錄了pre-exec鉤子,KSH在http://www.manpagez.com/man/1/ksh/中記錄了一個調試鉤子,並且可以在https://github.com/jml/undistract-me找到向BASH添加預執行程序的hack – Shnatsel