我有一个在后台运行的nohup作业。它有一个for循环,可以重复任务10次。我必须使用“kill”10次完全阻止它。有没有更有效的方法来做到这一点?
答案 0 :(得分:1)
如果您:
ps -ef|grep <script name>
获取PID(第二列)
然后:
kill -9 <script PID>
答案 1 :(得分:1)
要查找与您的脚本匹配的所有流程,可以使用以下内容:
pgrep -fl command
-f
将与完整参数列表匹配,-l
代表长输出。杀死所有的过程:
pkill -f command
要仅杀死子进程,一旦找到父PID,您可以尝试:
pkill -9 -P <parent pid>
这将向所有具有父进程ID kill
的进程发送信号9 -P <parent pid>
杀死你可以使用的所有父母/孩子:
kill -9 -PID
注意PID上的-
,它意味着将信号发送到PID及其所有子进程。
答案 2 :(得分:0)
$!
变量存储最近后台作业的进程号。
#!/bin/sh
for i in 1 2 3 4 5 6 7 8 9 10; do
nohup sleep 300 &
CMD_LIST="$CMD_LIST $!"
done
kill $CMD_LIST
这将启动十个后台命令,每个命令需要五分钟(300秒)。它将进程ID存储在$CMD_LIST
中。循环之后,它会杀死它们。请注意kill
命令中故意缺少引号(列表中的每个项都是一个单独的参数)。