Linux kill
约 1121 字大约 4 分钟
2025-01-11
介绍
kill 命令用于终止正在运行的进程。
kill 命令可以发送不同的信号给目标进程,来实现不同的操作,如果不指定信号,默认会发送 TERM 信号(15),即终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。
语法
$ kill [options] <PID>其中 <PID> 是要终止进程的进程 ID。
options说明:
-l:列出所有可用的信号。-<signal>:发送特定的信号给目标进程,如-9表示发送KILL信号,即强制终止进程。
常用信号:
SIGKILL(信号9):立即结束进程,不能被捕获或忽略。SIGTERM(信号15):正常结束进程,可以被捕获或忽略。SIGSTOP(信号19):暂停进程,不能被捕获、忽略或结束。SIGCONT(信号18):继续执行被暂停的进程。SIGINT(信号2):通常是Ctrl+C产生的信号,可以被进程捕获或忽略。
使用
获取进程的PID
获取进程的PID有多种方式,例如使用 ps 命令或 top 命令等。更多方法可以查看Linux 查询进程的PID
默认终止进程
默认情况下,kill命令发送SIGTERM(信号15),这可以请求进程终止。如果进程没有捕获这个信号,它将被终止。
$ kill PID其中 PID 是进程的 ID。
发送指定信号
通过 -s 选项可以发送指定的信号。
$ kill -s SIGNAL PID例如,发送 SIGKILL(信号9)将立即结束进程,不能被忽略或捕获。
$ kill -9 PID杀死进程组
使用 -9 选项可以杀死整个进程组。
$ kill -9 -PID本地根据服务名称kill
# ZHIPUAI_SERVER_DIR="/data/apps/py/test-agents/main.py"
$ ps -ef | grep $ZHIPUAI_SERVER_DIR | grep -v grep | awk '{print $2}' | xargs kill$ ps -ef | grep wl_apscheduler.py | grep -v grep | awk '{print $2}' | xargs kill -9$ sudo kill - $(pidof 进程名关键字)根据端口号kill
kill -9 $(lsof -i:8000 | awk '{print $2}')远程根据服务名称kill
- 远程服务进程
# ZHIPUAI_SERVER_DIR="/data/apps/py/test-agents/main.py"
$ ssh username@host "ps -ef | grep $ZHIPUAI_SERVER_DIR | grep -v grep | awk '{print $2}'"ps -ef指令用来查询所有进程grep通过管道来过滤grep -v是反向查询的意思,grep -v grep的作用是除去包含grep的项。awk '{print $2}'以空格作为分隔符,打印第二个字段远程查询
PID并只显示进程号
# ZHIPUAI_SERVER_DIR="/data/apps/py/test-agents/main.py"
pid=$(ssh username@host "ps -ef | grep $ZHIPUAI_SERVER_DIR | grep -v grep | awk '{print $2}'"| awk '{print $2}')
echo $pid- 只
kill掉一个进程
$ ssh username@host "kill -9 ${pid}"错误
远程kill进程报错:kill: failed to parse argument: 'root'
$ ps -ef | grep wl_apscheduler.py | grep -v grep | awk '{print $2}' | xargs kill -9由于$2是个变量,无法读取到远端主机的变量,因此执行杀掉进程命令时,找不到,导致报错。修改为\$2。
$ ps -ef | grep wl_apscheduler.py | grep -v grep | awk '{print \$2}' | xargs kill -9屏蔽bash的line 23: 73654 Killed输出
$ ps -ef | grep wl_apscheduler.py | grep -v grep | awk '{print $2}' | xargs kill -9
-bash: line 23: 73654 Killed nohup python3 ./wl_apscheduler.py > output.log 2>&1
[1]+ Exit 137 cd /var/mt-project/mt-scrapy/welfare-lottery-scrapy/ && nohup python3 ./wl_apscheduler.py > output.log 2>&1bash如何屏蔽kill输出,我不希望脚本显示输出如上的: line 23: 73654 Killed 。
我运行如下脚本:
sleep 20 &
PID=$!
kill -9 $PID >/dev/null 2>&1我不希望脚本显示如下输出:
line 51: 22943 Killed sleep我不知道为什么会这样,我将输出重定向到/dev/null。对我有用的唯一方法是在这里stackoverflow.com/a/14152313/6706875,kill -13 pid,它不会生成任何默认的kill输出。该消息不是来自kill或后台命令,而是来自bash,它发现其后台作业之一已被杀死。为了避免出现此消息,请使用disown将其从bash的作业控件中删除:
sleep 20 &
PID=$!
disown $PID
kill -9 $PID总结
kill、killall、pkill比较
| 特性 | kill | killall | pkill |
|---|---|---|---|
| 操作方式 | 需要明确指定 PID | 需要指定进程名 | 通过进程名或其他属性匹配 |
| 匹配方式 | 精确的 PID | 进程名 | 进程名或其他属性 |
| 支持正则匹配 | 不支持 | 不支持 | 支持复杂匹配(如 -f) |
| 操作范围 | 仅针对特定进程 | 匹配全部同名进程 | 可灵活控制匹配的进程范围 |
