一行命令kill(杀)掉你的进程
查看进程
pi@raspberry:~ $ ps -ef | grep python3 UID PID PPID C STIME TTY TIME CMD pi 4678 4666 0 11:57 pts/1 00:00:00 python3 ./Desktop/device.py pi 4859 4644 0 11:57 pts/0 00:00:00 grep --color=auto python3 pi@raspberry:~ $
常规操作
pi@raspberry:~ $ kill -9 4678
一行 Code
pi@raspberry:~ $ ps -ef | grep device.py | grep -v grep | awk '{print $2}' | xargs kill -9
解析
ps -ef 列出进程信息 grep device.py 在进程信息中找到需要杀死的进程命令名 grep -v grep 在进程信息中剔除带 grep 的信息(也就是剔除 grep 命令的进程,避免误删) awk '{print $2}' 提取字符串行内容的第2个字段,也就是当前示例的进程号 xargs kill -9 将进程号作为参数传递给kill -9这个命令
总结
ps -ef | grep process_name_segment | grep -v grep | awk '{print $2}' | xargs kill -9
其中 process_name_segment 是想要杀死的进程名称的片段,实现模糊查找。
注意:有时候在嵌入式 Linux 系统中,打印行的第1个字段即为进程号,上述命令需要改写为 'print $1'。
补充1:
敲黑板:使用出发现 awk '{print $2}' 必须是 单引号,不能是双引号!
因为 ' ' 单引号内容代表引入代码块,并对命令行中信息进行解析。
补充2:
更简单的指令 pgrep 可以理解成是 pid grep ,筛选进程号,
因此更简单的写法是:
kill -9 `pgrep process_name_segment`
这里涉及一个知识点,若想要把其他命令的指令当做参数,可以使用 `执行命令` 反引号包裹起来,或者使用 $(执行命令) 美元符号加括号包裹起来。
于是,上述写法也可以是:
kill -9 $(pgrep process_name_segment)