前台运行脚本的终止(直接可见进程)
若脚本在终端前台运行(例如通过 ./script.sh
启动):
- 按下组合键:
Ctrl + C
立即发送SIGINT
信号终止进程,适用于大多数情况。
后台运行脚本的终止(需定位进程)
步骤1:定位进程ID(PID)
-
方法1:使用
ps
命令ps aux | grep sh
输出示例:
user 1234 0.0 0.1 20250 5120 pts/0 S Jul01 0:00 /bin/sh ./myscript.sh
记录PID(示例中为1234
)。 -
方法2:使用
pgrep
(精确匹配)pgrep -f "myscript.sh" # 根据脚本名搜索
步骤2:发送终止信号
- 温和终止(允许清理资源):
kill -15 1234 # 发送 SIGTERM 信号(默认)
- 强制终止(无响应时使用):
kill -9 1234 # 发送 SIGKILL 信号(强制杀死)
通过进程名批量终止
- 使用
pkill
:pkill -f "myscript.sh" # 匹配完整脚本名
- 使用
killall
:killall sh # 终止所有名为 "sh" 的进程(谨慎!可能误杀)
使用系统监控工具(可视化操作)
htop
工具:- 安装:
sudo apt install htop
(Debian/Ubuntu)或sudo yum install htop
(CentOS) - 运行
htop
→ 按 F3 搜索sh
→ 选中进程 → 按 F9 发送信号(如SIGKILL
)。
- 安装:
关键注意事项
-
权限要求:
- 普通用户只能终止自己的进程。
- 终止系统进程需
sudo
权限(sudo kill -9 PID
)。
-
信号选择优先级:
graph LR A[尝试 SIGTERM -15] --> B{进程是否停止?} B -->|否| C[使用 SIGKILL -9] B -->|是| D[结束]
避免滥用
SIGKILL
:强制终止可能导致数据损坏或资源未释放。 -
防止误操作:
- 确认PID或脚本名正确性(通过
ps
二次验证)。 - 批量命令如
killall sh
可能误杀其他关键shell进程。
- 确认PID或脚本名正确性(通过
-
后台进程管理:
启动时添加&
(如./script.sh &
)可放入后台,终止前先用jobs
查看列表。
场景 | 推荐命令 | 风险等级 |
---|---|---|
前台运行 | Ctrl + C |
低 |
已知单个PID | kill -15 PID |
低 |
精确匹配脚本名 | pkill -f "name.sh" |
中 |
无响应进程 | kill -9 PID |
高 |
重要提示:生产环境中操作前务必备份数据,并优先尝试
SIGTERM
信号,若脚本设计复杂,建议加入信号处理逻辑(如trap 'cleanup' SIGTERM
),实现优雅退出。
引用说明:
本文方法基于 Linux 内核信号处理机制,参考《Linux 系统编程手册》(Michael Kerrisk 著)及 GNU Bash 官方文档,命令详情可通过 man signal
或 man kill
查看。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9605.html