优雅地终止进程

优雅地终止进程

当我的 bash 脚本使用 selenium 服务器完成后,脚本会像这样杀死它:

kill `ps -ef | grep selenium | awk '{ print $2 }'`

虽然这有效并且它确实杀死了 selenium 脚本,但它也尝试杀死该进程,grep selenium所以当进程号返回到kill命令时,该进程已经消失,因此它最终会生成一条错误消息。 (换句话说:它最终杀死了两个进程,其中一个是真正的 selenium 服务器,另一个是一个短暂的进程,这是我执行此命令的副作用。)

有没有一种更优雅的方式来终止进程,并且不会产生这种意想不到的副作用?

(FWIW 我有一个想法:这个相同的脚本在脚本的早期启动了 selenium,所以也许如果有一种方法可以在启动 selenium 时捕获 PID,我可以保留它并直接杀死它,而不是 grep for问题是,我不知道如何获取该 PID、如何使用变量来保留它以及如何在脚本中稍后引用它,但这是更好的方法吗?)

答案1

尝试该pgrep命令,它将输出您感兴趣的命令的 PID。

pgrep selenium

要实际终止该进程,请使用配套pkill命令。

pkill selenium

答案2

pkill selenium如果这个或其他任何一个都不起作用,请尝试使用您可以继续将您的方法与另一个管道序列一起使用,例如

kill `ps -ef|grep -i selenium| grep -v grep| awk '{print $2}'`

答案3

尝试使用grep [s]elenium.这样就找不到grep进程了。

答案4

使用-m 1带有 grep 命令的开关仅获取第一个找到的进程。只要你按 PID 升序对进程进行排序,它就会起作用。

相关内容