2011-07-06 108 views
0

我在C程序中用exec(「/ bin/sh」)啓動一個shell。 我如何跟蹤由「sh」過程啓動的處理? 例如,如果我在這個/ bin/sh過程中鍵入'ls',我想檢索'ls'的pid,並在結束時收到通知 。如何跟蹤殼外殼的處理啓動?

編輯:

使我的問題更一般化。如何通過您自己啓動的流程跟蹤啓動的進程 ?

回答

0

如果您希望在您的孩子啓動自己的孩子(您的孫子)或當這個孫子退出時直接得到通知,您必須跟蹤您的孩子。沒有便攜的方式來做到這一點。

在Linux上,您可以使用ptrace()系統調用來執行此操作。您基本上成爲附加到子進程的調試器,如gdbstrace。其他操作系統具有類似的設施。但是有一些副作用,它的使用應該只限於測試和故障排除。

您可以做的唯一便攜式的事情是反覆觀察ps的輸出並檢查是否有以您的孩子爲父母的過程,但是您可能會錯過短暫生成的過程並在您有機會之前快速退出注意他們,這種方法也是工作密集型的。