我经常需要在编程期间终止一个进程。
我现在的做法是:
[~]$ ps aux | grep 'python csp_build.py'
user 5124 1.0 0.3 214588 13852 pts/4 Sl+ 11:19 0:00 python csp_build.py
user 5373 0.0 0.0 8096 960 pts/6 S+ 11:20 0:00 grep python csp_build.py
[~]$ kill 5124
如何自动提取进程id并在同一行中杀死它?
是这样的:
[~]$ ps aux | grep 'python csp_build.py' | kill <regex that returns the pid>
下面的命令将会派上用场:
Kill $(ps -elf | grep <process_regex>| awk {'print $4'})
例如,
Ps -elf | grep顶部
0 T ubuntu 6558 6535 0 80 0 - 4001 signal 11:32 pts/1 00:00:00 top
0 S ubuntu 6562 6535 0 80 0 - 2939 pipe_w 11:33 pts/1 00:00:00 grep --color=auto top
Kill -$(ps -elf | grep top| awk {'print $4'})
-bash: kill: (6572) - No such process
[1]+ Killed top
如果进程仍然卡住,使用“-9”扩展硬杀,如下所示:
Kill -9 $(ps -elf | grep top| awk {'print $4'})
希望这对你有所帮助!
使用-C ps命令的标志
- c cmdlist
按命令名选择。它选择的进程
可执行文件名称在cmdlist中给出。
第一个例子,简单的命令
所以如果你用标准shebang运行你的脚本,并调用他们的名字:
/path/to/csp_build.py
你可能会找到他们
ps -C csp_build.py
So
kill $(ps -C csp_build.py ho pid)
也许足够了。
第二种情况,搜索CMD
更强烈一点,但仍然比这个SO问题的大多数其他答案快得多…
如果你不知道这是谁,或者你只是匆匆走过
python csp_build.py
python3 csp_build.py
python /path/to/csp_build.py
你可以通过以下方式找到它们:
ps -C python,python3,csp_build.py who pid,cmd | grep csp_build.py
然后使用sed:
kill $(ps -C python,python3,csp_build.py who pid,cmd |
sed -ne '/csp_build.py/s/^ *\([0-9]\+\) .*$/\1/p')