【发布时间】:2011-12-21 21:14:06
【问题描述】:
我执行了以下命令
$ nohup ./tests.run.pl 0 &
现在,当我尝试使用
杀死它(以及从此脚本开始的执行)时$ kill -0 <process_id>
它不起作用。如何杀死 nohupped 进程和通过 nohupped 脚本运行的进程?
谢谢
【问题讨论】:
我执行了以下命令
$ nohup ./tests.run.pl 0 &
现在,当我尝试使用
杀死它(以及从此脚本开始的执行)时$ kill -0 <process_id>
它不起作用。如何杀死 nohupped 进程和通过 nohupped 脚本运行的进程?
谢谢
【问题讨论】:
kill -0 不会 终止进程。它只是检查你是否可以向它发送信号。
只需kill pid,如果不起作用,请尝试kill -9 pid。
【讨论】:
只需kill <pid>,它将发送一个SIGTERM,nohup 不会忽略。
您不应该先发送SIGKILL,因为这会使进程没有机会恢复;您应该按顺序尝试以下操作:
SIGTERM (15)SIGINT (2)SIGKILL (9)【讨论】:
我会这样做:
jobs
[1] + Running nohup ./tests.run.pl
kill %1
【讨论】:
如果您不知道进程 ID,并且它可能在 shell(或循环)内运行各种命令,您可以运行 jobs -l 列出作业和 PID,然后运行 kill 它们。
查看示例:
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$
【讨论】:
杀死nohup进程
ps aux |grep nohup
grep PID
kill -15 -1 16000(将注销您)并在下次登录根目录时清除
【讨论】: