
我有一個複雜的嵌入式 Linux 軟體,在 gentoo 衍生產品上運行,其中某段程式碼每隔大約 84 分鐘定期執行一次。掃描主代碼以找到可能執行該代碼的位置並不成功,而且crontab
似乎也沒有可能的解釋。
我的問題:是否可以透過修改有問題的程式碼來找出哪個其他進程/程式碼/檔案/服務首先啟動了它?目錄中有一些/proc
我可以使用的資訊嗎?或不可能找出執行給定程式碼的進程?
答案1
如果進程壽命很長,並且您有時間去檢查它,克里斯的回答會起作用,但如果它是一個短時間運行的命令,則在進程仍然存在時可能很難捕獲它。
解決此問題的另一種方法是在程式周圍放置一個「包裝器」。
假設被呼叫的程式是/usr/bin/someprog
.
- 搬去。
/usr/bin/someprog
/usr/bin/someprog.orig
- 建立
/usr/bin/someprog
為腳本,例如:
#!/bin/sh
echo "My pid: $$" >> /tmp/someprog.log
ps -ef --forest >> /tmp/someprog.log
exec /usr/bin/someprog.orig
- 進而
chmod a+x /usr/bin/someprog
這將轉儲進程樹並將其放入/tmp/someprog.log
.然後你可以查看這棵樹並找出是什麼在生成它。
答案2
聽起來您正在尋找父 PID (PPID):
$ ps -o ppid -p 5743
PPID
219
因為您還提到您有/proc
:
$ awk '{ print $4 }' /proc/5743/stat
219