不断检查正在运行的进程

不断检查正在运行的进程

我需要检查某个进程是否正在运行,并在该进程终止、停止或关闭时发出警报。

我已经使用了 pgrep 和 processName,然后发出警报,如下所示:

pgrep processName && notifiy-send

但是这只能给我进程的 pid,还有其他方法吗?

答案1

使用pgrep提供的信息最少。ps -aux | grep有时使用可以提供太多信息:

$ pgrep eyesome
1200
1217
1226

$ ps -aux | grep eyesome
root      1197  0.0  0.0   4504   696 ?        Ss   07:36   0:00 /bin/sh -c    /usr/local/bin/eyesome.sh
root      1200  0.0  0.0  13380  3912 ?        S    07:36   0:01 /bin/bash /usr/local/bin/eyesome.sh
root      1217  0.0  0.0  12768  3308 ?        S    07:36   0:00 /bin/bash /usr/local/bin/eyesome-dbus.sh
root      1226  0.0  0.0  12768  2368 ?        S    07:36   0:00 /bin/bash /usr/local/bin/eyesome-dbus.sh
root     10567  0.0  0.0  54792  3964 pts/18   S    10:27   0:00 sudo eyesome/movie.sh asdf
root     10568  0.0  0.0  12896  3380 pts/18   S    10:27   0:08 /bin/bash eyesome/movie.sh asdf
rick     26612  0.0  0.0  14224  1020 pts/19   S+   16:52   0:00 grep --color=auto eyesome

因此,让我们缩小范围,同时使其易于使用:

$ ps -aux | grep "sudo eyesome/movie" | grep -v grep
root     10567  0.0  0.0  54792  3964 pts/18   S    10:27   0:00 sudo eyesome/movie.sh asdf

现在将其放入已在启动应用程序中加载的脚本中:

#!/bin/bash
# Name: checkrunning.sh
# For: https://askubuntu.com/questions/1160844/check-for-running-proccess-constantly

while true; do

    Running=$(ps -aux | grep "sudo eyesome/movie" | grep -v grep)
    if [[ "$Running" == "" ]]
    then
        echo "NOT Running"
    else
        echo "Running: $Running"
    fi
    sleep 10

done

使用以下方法将文件标记为可执行文件:

chmod /path/to/checkrunning.sh

将命令替换echonotify-send

相关内容