当我的 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 升序对进程进行排序,它就会起作用。