杀死shell脚本中运行的后台作业

时间:2014-01-04 23:12:28

标签: shell

我创建了一个shell脚本,它在后台运行多个进程,并在最后侦听用户的键盘,当按下enter键时,它会杀死以前创建的进程。

类似的东西:

#!/bin/sh
process_1 &
process_2 &
process_3 &

read -p "PRESS [ENTER] TO TERMINATE PROCESSES." PRESSKEY

kill -2 `jobs -p`

请注意,我在后台运行流程(后面的&),当我做类似的事情时,我想:

kill -2 `jobs -p`

在后台运行的所有作业都会被杀死,但实际上它告诉我我的命令无效,所以我认为jobs -p没有返回任何内容。

关于如何杀死process_1 process_2和process_3的任何想法?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以将PID存储在空格分隔列表中并将其删除:

process_1 & pids="${pids-} $!"
process_2 & pids="${pids-} $!"
process_3 & pids="${pids-} $!"

read -p "PRESS [ENTER] TO TERMINATE PROCESSES." PRESSKEY

kill -2 $pids # Without quotes to make the PIDs separate arguments

${pids-}语法是为了避免在使用set -o nounset时出错。)

答案 1 :(得分:0)

试试这个:

kill $(ps|grep 'process_1'|awk '{print $1}')

说明: ps返回正在运行的进程列表。我们grep仅针对我们要杀死的那个,并使用awk来获取流程的PID。