我执行了以下命令
$ nohup ./tests.run.pl 0 &
现在当我尝试使用
杀死它(以及从此脚本启动的执行)$ kill -0 <process_id>
它不起作用。如何杀死nohupped进程以及通过nohupped脚本运行的进程?
由于
答案 0 :(得分:42)
kill -0
不会杀死该进程。它只是检查你是否可以向它发送信号。
只需kill pid
,如果不起作用,请尝试kill -9 pid
。
答案 1 :(得分:26)
只需kill <pid>
即可发送SIGTERM
,nohup
不会忽略。
您不应该首先发送SIGKILL
,因为这会使进程无法恢复;你应该按顺序尝试以下方法:
SIGTERM
(15)SIGINT
(2)SIGKILL
(9)答案 2 :(得分:4)
我会做类似的事情:
jobs
[1] + Running nohup ./tests.run.pl
kill %1
答案 3 :(得分:3)
如果您不知道进程ID并且它可能在shell(或循环)中运行各种命令,则可以运行jobs -l
列出作业和PID,然后kill
它们。< / p>
参见示例:
ubuntu@app2:/usr/share/etlservice/bin$ jobs -l
[1] 27398 Running nohup ./extract_assessor_01.sh > job1.log &
[2] 27474 Running nohup ./extract_assessor_02.sh > job2.log &
[3] 27478 Running nohup ./extract_assessor_03.sh > job3.log &
[4]- 27481 Running nohup ./extract_assessor_04.sh > job4.log &
[5]+ 28664 Running nohup ./extract_assessor_01.sh > job1.log &
ubuntu@app2:/usr/share/etlservice/bin$ sudo kill 27398
sudo kill 27474[1] Terminated nohup ./extract_assessor_01.sh > job1.log
ubuntu@app2:/usr/share/etlservice/bin$ sudo kill 27474
[2] Terminated nohup ./extract_assessor_02.sh > job2.log
ubuntu@app2:/usr/share/etlservice/bin$ sudo kill 27478
[3] Terminated nohup ./extract_assessor_03.sh > job3.log
ubuntu@app2:/usr/share/etlservice/bin$ sudo kill 27481
[4]- Terminated nohup ./extract_assessor_04.sh > job4.log
ubuntu@app2:/usr/share/etlservice/bin$ sudo kill 28664
[5]+ Terminated nohup ./extract_assessor_01.sh > job1.log
ubuntu@app2:/usr/share/etlservice/bin$