如何監控進程子進程 fork和exec調用追蹤方法

最直接的方式是使用 strace、auditd 或 systemtap 工具;1. strace 可追蹤指定進程的 fork 和 execve 系統調用,加 -f 參數可監控子進程;2. auditd 適合系統級長期監控,通過配置規則記錄 execve 調用及相關上下文;3. systemtap 支持編寫自定義腳本實現靈活監控,適合高級用戶和自動化平臺集成。

如何監控進程子進程 fork和exec調用追蹤方法

linux環境下,想監控一個進程及其子進程的 fork 和 exec 調用,最直接的方式是利用系統自帶的調試和追蹤工具。這類操作通常用于排查程序行為、調試服務啟動流程,或者分析惡意行為。下面介紹幾種實用的方法。

如何監控進程子進程 fork和exec調用追蹤方法


使用 strace 追蹤 fork 和 exec

strace 是 Linux 下非常強大的系統調用追蹤工具。它可以讓你看到某個進程在運行時都調用了哪些系統調用,包括 fork、execve 等。

如何監控進程子進程 fork和exec調用追蹤方法

使用方法:

  • 監控某個進程的所有系統調用:

    如何監控進程子進程 fork和exec調用追蹤方法

    strace -p <pid>
  • 只關注 fork 和 exec(更高效):

    strace -p <pid> -e trace=fork,execve
  • 如果你想同時監控子進程(比如服務啟動腳本),加上 -f 參數:

    strace -f -p <pid> -e trace=fork,execve

這樣就能看到目標進程以及它 fork 出來的所有子進程的 exec 行為,適合快速定位問題。


用 auditd 實現系統級監控

如果你需要對整個系統進行監控,而不是只針對單個進程,可以使用 auditd。它是 Linux 審計系統的守護進程,適合做長期或安全相關的監控。

配置步驟:

  1. 安裝 auditd(以 ubuntu 為例):

    sudo apt install auditd
  2. 添加審計規則,監控 execve 調用(包含 fork 后執行新程序的行為):

    sudo auditctl -w /usr/bin/ -p war -k my_exec_events

    或者更細粒度地設置系統調用過濾:

    sudo auditctl -a exit,always -F arch=b64 -S execve -k exec_monitor
  3. 查看日志:

    ausearch -k exec_monitor

auditd 的優勢在于它能記錄更完整的上下文信息,比如用戶、進程名、參數等,適合做合規審計或入侵檢測。


利用 systemtap 編寫自定義腳本

對于有定制化需求的場景,比如你想在特定條件下才觸發記錄,或者要聚合數據統計,可以考慮使用 systemtap。

簡單示例腳本:

probe syscall.fork {     printf("PID %d called fork()n", pid()) }  probe syscall.execve {     printf("PID %d is executing %sn", pid(), filename) }

保存為 trace_exec_fork.stp,然后運行:

sudo stap trace_exec_fork.stp

systemtap 提供了更大的靈活性,但需要一定的學習成本,適合高級用戶或自動化監控平臺集成。


小貼士與注意事項

  • 如果你發現子進程沒有被追蹤到,可能是沒加 -f 參數。
  • execve 是實際執行新程序的系統調用,而 fork 只是創建了一個副本。
  • 不同發行版默認安裝情況不同,記得先檢查是否已安裝相關工具。
  • 在生產環境使用 auditd 時要注意性能影響,建議只監控必要內容。

基本上就這些方法了。根據你的具體場景選擇合適的工具,效果會更好。

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享