kill、pkill、killall分别基于PID、属性匹配、完整进程名终止进程;kill最安全可控,pkill支持正则与多条件筛选,killall适合批量操作;均应优先发SIGTERM再考虑SIGKILL,避免误杀关键进程。

如果您需要在Linux系统中终止运行中的进程,但不确定应使用哪个命令或如何正确发送信号,则可能是由于对kill、pkill和killall三者的适用场景与行为差异缺乏清晰认知。以下是针对这三种进程管理命令的详细操作说明:
一、kill命令:基于PID的精准控制
kill命令通过进程ID(PID)向指定进程发送信号,默认为SIGTERM(15号信号),允许进程执行清理后退出;当进程无响应时,可改用SIGKILL(9号信号)强制终止。该方式最安全、最可控,适用于已知确切PID的场景。
1、使用ps或pgrep获取目标进程PID:
ps aux | grep nginx
2、向进程发送默认终止信号(SIGTERM):
kill 1234
3、向进程发送强制终止信号(SIGKILL):
kill -9 1234
4、以信号名形式发送TERM信号:
kill -TERM 1234
5、列出所有可用信号名称:
kill -l
二、pkill命令:按名称与条件匹配进程
pkill根据进程名、用户、终端、进程组等属性进行模式匹配,并向匹配到的所有进程发送信号。它支持正则表达式和多种筛选选项,灵活性高于killall,适合复杂匹配需求。
1、终止所有名为python的进程:
pkill python
2、仅向匹配到的最小PID进程发送信号:
pkill -o sshd
3、仅向匹配到的最大PID进程发送信号:
pkill -n sshd
4、终止指定用户(如user1)启动的所有bash进程:
pkill -u user1 bash
5、终止指定终端(如tty1)上的所有进程:
pkill -t tty1
6、使用正则表达式匹配以“my”开头的进程:
pkill '^my'
三、killall命令:按完整进程名批量终止
killall依据进程的**完整可执行文件名**匹配并终止所有同名进程,默认发送SIGTERM信号。它不支持正则表达式,但提供交互确认、大小写忽略、进程组操作等实用选项,适合快速清除已知名称的全部实例。
1、终止所有nginx进程:
killall nginx
2、强制终止所有bash进程:
killall -9 bash
3、向nginx进程发送TERM信号(等效于默认行为):
killall -TERM nginx
4、启用交互模式,在终止前逐一确认:
killall -i nginx
5、忽略大小写匹配进程名:
killall -I MyApp
6、仅匹配完整进程名(避免部分字符串误杀):
killall -e mysqld
四、信号选择原则与风险提示
所有命令均依赖信号机制实现进程控制,不同信号触发不同响应行为。错误使用高权限信号可能导致数据丢失或服务异常,因此必须遵循信号优先级策略。
1、优先尝试SIGTERM(15),给予进程自我清理机会
2、若进程未退出,再使用SIGKILL(9)强制终止
3、避免对数据库主进程(如mysqld、postgres)直接使用-9参数,以防事务中断与文件损坏
4、使用SIGHUP(1)可通知守护进程重载配置,无需重启服务
5、SIGSTOP(19)与SIGCONT(18)可用于暂停/恢复进程,不终止运行状态
五、组合诊断与安全验证方法
在执行终止操作前,应先确认目标进程身份与影响范围,防止误杀关键系统进程。可通过辅助命令交叉验证进程信息,提升操作安全性。
1、仅显示匹配进程的PID列表(不执行终止):
pgrep nginx
2、显示进程完整路径与启动参数:
ps -fC nginx
3、按用户列出其全部进程:
ps -u user1
4、查看某进程打开的文件与端口:
lsof -p 1234
5、确认进程所属用户及终端:
ps -o pid,user,tty,comm -p 1234










