如何检查过程是否在Linux中运行



我正在尝试自动检查过程是否正在运行,并且必须相应地执行下一步。我写了一个bash脚本,但似乎不起作用。

if ps aux | grep [M]yProcessName > /dev/null
then
  echo "Running"
else
  echo "Not running"
fi

我的if语句错误使用了吗?

您不想知道(已知PID的特定过程)是否正在运行(可以通过测试/proc/1234/是否存在PID 1234),但是如果某些过程正在运行一个给定命令(或给定的可执行文件)。

请注意,杀死(2)SYSCALL可用于检查给定的过程是否正在运行(例如0信号,例如kill(pid,0))。从程序内部,这是检查已知PID过程是否仍然存在并运行(或等待)的一种常见方法。

您可以使用pidof命令来查找运行某些可执行文件的过程,例如pidof zsh查找所有zsh进程。您也可以使用killall -s 0 zsh

您可能对pgrep实用程序和/proc文件系统感兴趣。

ps aux | grep [M]yProcessName | grep -v grep

使用-z检查字符串是否为空,类似的东西可以起作用:

line=$(ps aux | grep [M]yProcessName)
if [ -z "$line" ]
then
    echo "Not Running"
else
    echo $line > /dev/null
    echo "Rinnung"
fi

有一个解决方案:

if [ "$(ps aux | grep "what you need" | awk '{print $11}')" == "grep" ]; then ... elif [ ... ]; then ... else ... fi

这在Debian 6中正常工作。

processid =$(ps aux | grep 'ProcessName' | grep -v grep| awk '{print $2}')

上面的命令将为您提供流程ID。将该进程ID分配给变量并执行此操作 ->

if cat /proc/$processid/status | grep "State:  R (running)" > /dev/null
then
  echo "Running"
else
  echo "Not running"
fi
SMBD=$(pidof smbd)
if [ "$SMBD" == "" ];
then
   /etc/init.d/samba start;
else
   /etc/init.d/samba restart;
fi

在我的系统上, ps aux | grep ProcessName始终得到该grep过程的行:

edw4rd     9653  0.0  0.0   4388   832 pts/1    S+   21:09   0:00 grep --color=auto ProcessName

所以,退出状态总是0。也许这就是您的脚本不起作用的原因。

返回0表示成功,而其他人失败

kill -0 `pid`; echo $?

只是为了明确提及该答案的一种方法, pgrep是按进程名称进行此操作的最佳方法:

pgrep [M]yProcessName

如果其名称匹配" yprocessname"的过程正在运行,pgrep将打印其PID到STDOUT,并使用代码0退出。否则,它将什么都不打印并使用代码1

退出

尝试此

ps aux | grep [M]yProcessName | grep -v grep

相关内容

  • 没有找到相关文章

最新更新