Process

如何找到產卵過程的來源?

  • July 2, 2020

我有一個在 RedHat Linux 實例上執行的 Java 程序。

問題是我殺死它後它會不斷重新出現。我不知道在哪裡看。我已經去過 crontab,但沒有運氣。

我查看了 PPID,但它指向 init (1)。

知道如何找到來​​源嗎?

有很多可能性(在其他答案中提到了一些):

  1. 經常執行的系統或使用者 cronjob,
  2. 在 SysV init 中,帶有指令/etc/inittab的服務條目,respawn
  3. 在 systemd 中,一個單元文件,其Restart選項設置為no,
  4. 在 Upstart 中,一個帶有respawn指令的服務配置文件,
  5. 過程監控工具,例如monit,或
  6. 該特定服務的臨時看門狗程序。

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 的前端)。

引用自:https://unix.stackexchange.com/questions/163603