在Linux系统运行过程中,我们经常会启动各类脚本执行任务,当脚本出现运行异常、占用过多系统资源或者已经不需要继续执行时,就需要及时停止正在运行的脚本。不同的脚本启动方式对应不同的停止方法,掌握正确的操作方式可以避免系统出现不必要的问题。

前台运行脚本的停止方法
如果脚本是在当前终端前台直接运行的,比如执行bash test.sh命令启动的脚本,停止方式非常简单,直接使用快捷键就可以终止进程。
最常用的快捷键是Ctrl + C,这个组合键会向当前前台进程发送SIGINT信号,默认情况下脚本收到这个信号就会终止执行。如果脚本内部捕获了这个信号并做了自定义处理,可能需要使用Ctrl + 发送SIGQUIT信号,这个信号的默认行为是终止进程并生成核心转储文件。
后台运行脚本的停止方法
如果脚本是在后台运行的,比如启动时加了&符号,或者使用nohup命令启动的脚本,就无法通过快捷键直接终止,需要通过进程管理相关命令来操作。
第一步:查找脚本对应的进程ID
首先需要找到正在运行的脚本对应的进程ID,也就是PID,常用的查找命令有以下几种:
ps命令:可以查看当前系统的进程信息,结合grep过滤出目标脚本的进程pgrep命令:可以直接根据进程名查找对应的PID,使用更简洁pidof命令:根据进程名查找PID,返回结果更直接
以下是使用ps命令查找脚本进程的示例,假设要查找的脚本是test.sh:
# 查看所有进程,过滤包含test.sh的进程 ps -ef | grep test.sh # 输出示例 # root 1234 1000 0 10:00 pts/0 00:00:00 bash test.sh # root 1235 1000 0 10:00 pts/0 00:00:00 grep --color=auto test.sh
上面的输出中,1234就是test.sh脚本对应的进程PID,注意要排除grep自身的进程,避免误判。
也可以使用更简洁的pgrep命令查找:
# 查找名为bash的进程中执行test.sh的PID pgrep -f "bash test.sh" # 输出示例 # 1234
第二步:使用kill命令终止进程
找到PID之后,就可以使用kill命令发送信号终止进程,不同的信号对应不同的终止行为:
| 信号编号 | 信号名称 | 作用说明 |
|---|---|---|
| 15 | SIGTERM | 默认信号,请求进程终止,进程可以捕获这个信号做收尾工作后退出 |
| 9 | SIGKILL | 强制终止信号,进程无法捕获,会直接被系统终止,可能会导致数据丢失 |
| 2 | SIGINT | 中断信号,和Ctrl+C发送的信号一致,进程可以捕获处理 |
常规情况下优先使用默认的SIGTERM信号终止进程,命令格式如下:
# 终止PID为1234的进程,默认发送SIGTERM信号 kill 1234
如果进程没有响应,再使用强制终止信号:
# 强制终止PID为1234的进程 kill -9 1234
停止脚本的注意事项
在停止脚本时需要注意以下几点,避免操作失误:
- 确认PID对应的进程确实是目标脚本,避免误杀其他重要进程,可以先通过
ps -fp PID命令查看进程详细信息 - 优先使用SIGTERM信号,给脚本留出收尾时间,比如关闭打开的文件、释放占用的资源,只有进程无响应时再使用SIGKILL信号
- 如果脚本启动了多个子进程,可能需要先停止子进程再停止父进程,或者使用
pkill命令根据进程组终止所有相关进程
以下是使用pkill命令根据脚本名批量终止所有相关进程的示例:
# 终止所有执行test.sh的bash进程 pkill -f "bash test.sh"
掌握以上方法之后,就可以应对Linux系统中各种正在执行脚本的停止场景,根据实际需求选择合适的方式操作即可。