您好,下面是旨在杀死进程“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“进程名称”