Process
如何找到產卵過程的來源?
我有一個在 RedHat Linux 實例上執行的 Java 程序。
問題是我殺死它後它會不斷重新出現。我不知道在哪裡看。我已經去過 crontab,但沒有運氣。
我查看了 PPID,但它指向 init (1)。
知道如何找到來源嗎?
有很多可能性(在其他答案中提到了一些):
- 經常執行的系統或使用者 cronjob,
- 在 SysV init 中,帶有指令
/etc/inittab
的服務條目,respawn
- 在 systemd 中,一個單元文件,其
Restart
選項設置為no
,- 在 Upstart 中,一個帶有
respawn
指令的服務配置文件,- 過程監控工具,例如
monit
,或- 該特定服務的臨時看門狗程序。
sysdig是一個有趣的新工具(僅限 Linux),可以提供更多關於程序啟動位置的資訊。
Sysdig 使用 Linux 核心的跟踪點功能來提供相當於快速、系統範圍的
strace
.例如,如果我想查看每個程序正在開始
ls
,我可以發出:sudo sysdig evt.type=execve and evt.arg.exe=ls
當
ls
在某處執行時,我會收到如下消息:245490 16:53:54.090856066 3 ls (10053) < execve res=0 exe=ls args=--color=auto. tid=10053(ls) pid=10053(ls) ptid=9204(bash) cwd=/home/steved fdlimit=1024 pgft_maj=0 pgft_min=37 vm_size=412 vm_rss=4 vm_swap=0 env=...
我截斷了返回的環境資訊,但是如你所見,在 ptid 中我可以看到呼叫 execve 的程序的名稱和 pid。
execve
是 Linux 中用於執行新命令的系統呼叫(所有其他 exec 呼叫只是 execve 的前端)。