Killall 有时会失败

Killall 有时会失败

您好,下面是旨在杀死进程“processName”的所有实例的脚本,但有时它无法杀死该进程,我们看到同一进程的两个实例,如何避免这种情况发生。

  #!/bin/sh


    pidof processName
    if [ $? -eq 0 ]
    then
       killall processName
       # give processName time to quit
       sleep 3

       pidof processName
       if [ $? -eq 0 ]
       then
          killall -9 processName
       fi
    fi

exit 0

答案1

它可能取决于命令行和进程名称。人们经常将这两者混淆,并想知道为什么该程序没有显示或删除他们认为应该显示的内容。此外,换出进程或更改名称的进程也会使其难以跟踪。

我假设你的程序没有 PID 文件。这实际上是跟踪进程的最佳方法,因为有些人可能希望运行两个进程(例如测试和开发,使用不同的配置文件)。此外,您的方法假设流程名称对于您的项目是唯一的。

对于您想要做的事情,pkill 可能更适合,因为您可以只给它进程名称,而不必担心 pidof。 pidof 的问题是,如果您有多个匹配的进程,并且您期望的是单个整数;你可能会破坏你的脚本。另外,如果使用 pkill,则使用 pgrep,因为它们具有相同的逻辑。

就像是:

#!/bin/sh

pkill processName
pgrep processName
if [ $? -eq 0 ]
then
  sleep 3
  pkill -9 processName
fi

答案2

如果您必须按名称终止进程,那么 pkill 将是另一个替代命令

pkill“进程名称”

相关内容