我正在尝试运行一个非常复杂的统计模型,我预计该模型将花费很长时间,因此我曾经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 下运行。
我能做些什么?
答案1
grep nohup
正如告诉你的那样,你的进程 14224 是ps
。因此,当您收到提示时,grep
结束,因此,kill
报告不存在这样的过程是合乎逻辑的。
nohup
您将不会在输出中看到调用的进程ps
。
那么,如何找到要杀死的进程呢?
由于我没有你的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 sleep :
$ 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
然后一切都消失了。
答案2
就我而言,我使用 nohup 来保护 laravel。我还必须终止绑定到端口的进程
使用fuser 8080/tcp
(根据您自己的端口更改端口)并杀死在那里找到的PID。