我创建了一个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的任何想法?提前谢谢。
答案 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。