Process

無法停止 nohup 程序

  • July 23, 2021

我正在嘗試執行一個非常複雜的統計模型,我預計這需要很長時間,所以我曾經nohup執行過這個過程。但是,我低估了長度,大約需要 260 多天才能完成,所以我想取消這個過程。

我嘗試使用 ps aux |grep nohup來獲取 PID,我得到以下輸出:

\<username> 4920  0.0  0.0  14224   972 pts/15   S+   01:53   0:00 grep nohup

當我使用kill -9 14224時,我被告知沒有過程。所以我使用ps -ef | grep beast-2了,因為我不記得我輸入的整個命令。拉出以下內容:

144039      1  0 Jul22 pts/12   00:00:00 /bin/sh /opt/anaconda3/bin/beast-2 -seed 777 -working -overwrite -instances 3 -threads 3 -beagle_SSE /home/<username>/XML/ST736_MTBD1.xml

kill -9 144039再次使用並檢查,但該程序仍在新的 PID 下執行。

我能做些什麼?

grep nohup正如您所說,您的程序 14224 是ps。所以,當你得到你的提示時,grep結束了,因此,kill報告沒有這樣的過程是合乎邏輯的。

您不會nohupps輸出中看到呼叫的程序。

那麼,如何找到要殺死的程序呢?

因為我沒有你的beast-2,我會用nohup sleep 99 &.

ps -ef | grep sleep

這會給我

ljm      1491988 1336776  0 16:43 pts/0    00:00:00 sleep 999
ljm      1492021 1492069  0 16:45 pts/0    00:00:00 grep sleep

1492021 又是我的grep,所以在這裡並不重要。1491988 是我的 nohupped sleep。父 PID 是 1336776。所以檢查它給了我

$ ps -f 1336776
UID          PID    PPID  C STIME TTY      STAT   TIME CMD
ljm      1336776 1336769  0 Jul22 pts/0    Ss+    0:00 /bin/bash

那是一個bash. 您可以更進一步,例如使用pstree

$ pstree -ap  1336769
konsole,1336769
 └─bash,1336776
     └─sleep,1492051 999

因此,如果您殺死父級,它將不再產生新beast-2的。在這裡我會

kill 1336769

這會殺死控制台和bash,但不會殺死 nohupped 睡眠:

$ ps -ef | grep sleep
ljm      1492051       1  0 16:48 ?        00:00:00 sleep 999
ljm      1492285 1492069  0 16:57 pts/1    00:00:00 grep sleep

父程序現在變成1了,也就是init程序。如果你現在殺死睡眠,

$ kill 1492051
$ ps -ef | grep sleep
ljm      1492329 1492069  0 16:59 pts/1    00:00:00 grep sleep

然後一切都過去了。

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