仅在进程正在运行时如何杀死?


14

目前,我在sh脚本文件中使用如下代码:

kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'` 

但是我想知道只有在进程(myServer这里)正在运行时才如何调用它吗?


kill仅在进程运行时才不可能调用,因为在测试和调用之间存在竞争条件kill(很可能在短时间内由于另一个原因而使进程停止)。您应该使用pkillkillall做与您尝试做的事情完全相同的事情,但是键入的次数更少(可能还有其他一些优点)。
2016年

Answers:


20

我通常只使用pgrep和pkill

if pgrep myServer; then pkill myServer; fi

7
为什么不pkill myServerkillall -q myServer?尝试杀死不存在的进程没有任何弊端。
David Foerster,2014年

12
如果没有要杀死的进程,它将不会退出0,因此可能会破坏脚本。
boutch55555 2014年

6
|| true然后附加。
David Foerster 2014年

是的,但是您将没有灵活性来添加其他消息来通知您该过程已经结束。
boutch55555 2014年

if ! killall -q myServer; then echo ERROR; fi
David Foerster

9

您可以使用pkill或来按名称杀死进程killall,检查其手册页。


是的,不像kill,这仅在进程正在运行时才杀死。例如pkill -u myuser -f myprocess\.[0-9]+
大通T.

6

有点不同的方法是这样的:

killall PROCESS || echo "Process was not running."

如果该进程不存在,这将避免1killall命令返回错误代码。该echo部分将只来付诸行动,如果killall回报率1,而本身将返回0(成功)。


5
使用killall -q效果更好
Anwar

1
警告,killall -q并非所有版本的unix都支持,macOS Catalina仍然不具备此功能。
tresf

0

尝试使用:

sudo kill `pidof process_name`

其中process_name是您要终止的进程的名称。这样做的好处是pidof将列出与给定名称匹配的所有进程的pid。由于kill接受多个pid,因此它将在一瞬间就杀死所有pid。

让我知道是否有帮助。


如果列表为空怎么办?(我的主要观点是,如果可能的话,根本不要调用kill)
myWallJSON

1
如果列表为空,则kill将返回错误代码1,但不会杀死任何内容。这等效于尝试不带参数调用kill。您可以添加一条if语句,该语句首先检查pidof是否返回空列表。如果未返回空列表,请致电kill `pidof process_name。如果确实返回空列表,请跳过kill调用。
amandion

0

我用R&D创建的小脚本。我希望你会喜欢

#!/bin/bash

echo " Enter the process name:"
read $proc_name
if pgrep $proc_name
then
echo " $proc_name running "
pkill $proc_name
echo "$proc_name  got killed"
else
echo " $proc_name is not running/stopped "
fi

用诸如script.sh之类的名称保存它,然后

chmod +x script.sh
./script.sh

然后输入您的进程名称。

注意:对此,我已经尝试了很多次。


我可以知道该脚本有什么问题吗,请投票解释一下。
rɑːdʒɑ

这个脚本没错... +1
WinEunuuchs2Unix

0

检查是否存在该过程pidof。如果存在,请杀死它:

(! pidof process_name) || sudo kill -9 $(pidof process_name)

执行上述命令后,退出代码始终为0。


0

pkill与选项一起使用-f

pkill -f myServer

选项-f是通常与流程名称匹配的模式。


-1

我会用:

ps x --no-header -o pid,cmd | awk '!/awk/&&/myServer/{print $1}' | xargs -r kill

xargs -r仅在有输入的情况下,告诉运行kill。将ps --no-header -eo pid,cmd输出转换为更好的格式以进行解析。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.