如何找出 Linux 上執行命令/程式碼的原因?

如何找出 Linux 上執行命令/程式碼的原因?

我有一個複雜的嵌入式 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

相關內容