如何在bash中停止使用for循环的nohup作业?

时间:2018-03-08 16:19:19

标签: bash unix

我有一个在后台运行的nohup作业。它有一个for循环,可以重复任务10次。我必须使用“kill”10次完全阻止它。有没有更有效的方法来做到这一点?

3 个答案:

答案 0 :(得分:1)

如果您:

ps -ef|grep <script name>

获取PID(第二列)

然后:

kill -9 <script PID>

答案 1 :(得分:1)

您可以混合使用pgreppkill

要查找与您的脚本匹配的所有流程,可以使用以下内容:

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命令中故意缺少引号(列表中的每个项都是一个单独的参数)。