前台运行脚本的停止方法
若脚本在终端前台运行(直接通过./script.sh
启动):
-
Ctrl + C 组合键
立即发送SIGINT
信号终止脚本,适用于大多数情况,脚本会执行预设的清理操作后退出。
注意:若脚本捕获了该信号(如使用trap
命令),可能无法立即停止。 -
Ctrl + Z 组合键 → 终止挂起任务
- 按
Ctrl + Z
挂起脚本(发送SIGTSTP
信号),脚本暂停并返回终端。 - 输入
jobs
查看挂起任务编号(如[1]
)。 - 终止任务:
kill %1 # 终止编号为1的任务(发送SIGTERM) kill -9 %1 # 强制终止(发送SIGKILL)
- 按
后台运行脚本的停止方法
若脚本在后台启动(如 nohup ./script.sh &
):
-
通过进程ID(PID)终止
- 查找脚本PID:
ps aux | grep script.sh # 过滤脚本名
- 终止进程:
kill 1234 # 发送SIGTERM(允许脚本清理资源) kill -9 1234 # 发送SIGKILL(强制终止,可能丢失数据)
- 查找脚本PID:
-
使用
pkill
或killall
- 按脚本名称终止:
pkill -f script.sh # 匹配完整命令 killall script.sh # 匹配进程名(需名称完全一致)
警告:确保名称唯一,避免误杀其他进程。
- 按脚本名称终止:
系统级管理工具
-
systemctl
(系统服务脚本)
若脚本注册为系统服务:sudo systemctl stop service-name.service # 优雅停止 sudo systemctl kill service-name.service # 强制终止
-
图形界面工具
- 使用
gnome-system-monitor
或htop
:
定位进程 → 右键选择”结束”或”强制结束”。
- 使用
高级场景处理
- 停止所有同名脚本:
pkill -f "python3 /path/to/script.py" # 匹配完整路径
- 终止子进程:
使用pkill -P 父PID
或编写脚本递归终止子进程。
关键注意事项
- 信号优先级:
- 优先使用
SIGTERM
(kill PID
),允许脚本执行清理。 SIGKILL
(kill -9
)是最后手段,可能引发资源未释放问题。
- 优先使用
- 权限检查:
- 普通用户只能终止自己的进程。
- 系统级进程需
sudo
权限。
- 数据安全:
强制终止可能导致文件损坏,重要任务建议添加信号处理逻辑(如trap "cleanup" SIGTERM
)。
总结步骤
- 确定脚本运行方式(前台/后台/服务)。
- 用
ps
、pgrep
或jobs
定位进程。 - 按需选择
kill
(安全终止)或kill -9
(强制终止)。 - 验证结果:
ps aux | grep script.sh
确认进程消失。
引用说明:本文方法基于 Linux 内核文档(kernel.org)、GNU Bash 手册(gnu.org)及 Linux 开发者社区最佳实践,操作前建议备份数据,生产环境请先在测试机验证。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/4715.html