如何停止后台运行的指定shell脚本且不影响其他运行中的脚本?
仅终止第一个后台Shell脚本的实现方法
你可以通过以下三种常用方式实现需求,按操作便捷度排序:
方法1:通过任务号终止(仅适用于未关闭运行脚本的终端的场景,最快无误差)
- 首先在当前运行脚本的终端执行
jobs命令,查看当前终端的后台任务列表:
输出样例如下:
其中行首方括号内的数字就是任务编号,编号1对应你第一个转入后台的脚本。[1] + running ./first_script.sh [2] - running ./second_script.sh - 执行
kill %1即可终止第一个脚本,将命令中的1替换为你实际查询到的第一个脚本的任务号即可。如果进程无响应无法正常终止,可以执行强制杀命令:kill -9 %1 - 如果你在执行
bg命令时已经记下了当时输出的任务号,可跳过查询步骤直接执行kill命令。
方法2:通过进程名匹配终止(适用于两个脚本文件名不一致的场景)
- 先执行
pgrep -f 第一个脚本的文件名确认匹配到的进程ID,比如第一个脚本名为demo1.sh,就执行pgrep -f demo1.sh,确认输出的PID只有你要终止的那一个。 - 确认无误后执行
pkill -f 第一个脚本的文件名即可终止目标脚本。
方法3:通过进程ID终止(适用所有场景,最稳妥)
- 执行
ps aux | grep 第一个脚本的文件名或者ps -ef | grep 第一个脚本的特征关键词,找到第一个脚本对应的PID(进程ID,为一串数字),注意排除grep自身的进程条目。 - 执行
kill 查询到的PID终止进程,无法正常终止时执行kill -9 查询到的PID即可。
注意:不要使用模糊匹配的杀进程命令(比如
pkill sh、killall sh),否则会误杀第二个正在运行的Shell脚本。
内容的提问来源于stack exchange,提问作者Science Rocker
相关产品推荐
相关产品推荐

