2015-11-05 52 views
1

有一個用戶進程1可以'執行'第二個進程2。如果我不知道什麼時候可以創建,我可以跟蹤第二個過程-2。在不知道pid的情況下,我不能在dtrace腳本中同時使用'-p'和'-c'選項,也不想手動執行該過程。dtrace將在未來運行的用戶進程

使用PID提供程序我得到一個名稱空間錯誤(函數不屬於進程1)。我想「:: functio_name:進入/ execname == 「過程-2」/ {},但這並不對任何指針編譯用戶空間程序

感謝

回答

2

我認爲這post可以幫助。你需要2的DTrace腳本:

(1)第一個腳本時使用process-2開始跟蹤一旦它開始運行,啓動另一個腳本跟蹤process-2

# cat followfork.d 
proc:::start 
/ppid == $target/ 
{ 
    stop(); 
    printf("fork %d\\n", pid); 
    system("dtrace -qs child.d -p %d", pid); 
} 

(2 ) 第二腳本跟蹤聚焦功能:

# cat child.d 
pid$target::function_name:entry 
{ 
    ...... 
} 

您也可以參考上DTrace郵件列表相關的討論:
How to trace libc module of both parent andchild processes?
When a process is stopped by stop() action, when and how does the process is restarted?

順便說一句,你還可以參考謝爾蓋Klyaus的Dynamic Tracing with DTrace & SystemTap檢查哪些探測應用於過程創建:
enter image description here