我经常需要在编程期间终止一个进程。

我现在的做法是:

[~]$ 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>

当前回答

如果你有pkill,

pkill -f csp_build.py

如果您只想根据进程名(而不是完整的参数列表)进行grep,则取消-f。

其他回答

你可以用awk和backtics来做

ps auxf |grep 'python csp_build.py'|`awk '{ print "kill " $2 }'`

awk中的$2打印列2,backtics运行打印的语句。

但是一个更干净的解决方案是让python进程将它的进程id存储在/var/run中,然后你可以简单地读取该文件并杀死它。

如果你有pkill,

pkill -f csp_build.py

如果您只想根据进程名(而不是完整的参数列表)进行grep,则取消-f。

如果pkill -f csp_build.py没有杀死进程,你可以添加-9来发送一个杀死信号,该信号不会被忽略。即pkill -9 -f csp_build.py

killall -r regexp

-r, --regexp

将进程名模式解释为扩展正则表达式。

这将只返回pid

pgrep -f 'process_name'

因此要在一行中终止任何进程:

kill -9 $(pgrep -f 'process_name')

或者,如果你知道这个过程的确切名称,你也可以试试pidof:

kill -9 $(pidof 'process_name')

但是,如果您不知道进程的确切名称,那么使用pgrep会更好。

如果有多个进程使用相同的名称运行,并且你想杀死第一个进程,那么:

kill -9 $(pgrep -f 'process_name' | head -1)

还要注意的是,如果你担心大小写敏感,那么你可以像在grep中一样添加-i选项。例如:

kill -9 $(pgrep -fi chrome)

更多关于信号和pgrep的信息在man 7信号或man信号和man pgrep