Bash:在继续脚本之前检查进程是否已启动

Bash:在继续脚本之前检查进程是否已启动

我用闹钟小程序做工作时。当计时器结束时,我让它运行一个脚本。该脚本执行两件事:1) 发出屏幕通知;2) 播放音频剪辑。

通知守护进程并不总是运行。因此,如果它没有运行,我想在尝试传递屏幕通知之前启动它。

为此,我有以下几点:

#!/bin/sh

if ! pgrep -f "notification-daemon" > /dev/null ;
    then
    /usr/lib/notification-daemon/notification-daemon &
fi

notify-send "Take 5"
aplay /home/Me/Music/brubek-clip.wav

问题是,第一次运行时,通知不会出现。守护进程已成功启动,后续运行的脚本将按预期运行。

当我sleep 0.5在对 的调用之后添加 anotification-daemon时,通知会在第一次运行时出现。但这似乎相当粗糙。

有没有办法在继续之前检查通知守护进程是否已启动?

答案1

您可以尝试使用 while 循环来等待服务启动:

#!/bin/sh

# If the notification daemon isn't running then launch it
if ! pgrep -f "notification-daemon" > /dev/null; then
    /usr/lib/notification-daemon/notification-daemon &
fi

# Wait for the notification daemon to finish launching
while ! pgrep -f "notification-daemon" > /dev/null; do

    # Set optional delay
    sleep 0.1

done

# Play awesome song (do-doop da-doop doop-doop-doop...)
notify-send "Take 5"
aplay /home/Me/Music/brubek-clip.wav

这应该保证您在守护进程运行之前不会继续(例如,如果由于某种原因它花费的时间超过了 0.5 秒的睡眠时间)。

我在网上搜索了一些类似的帖子,发现了一些似乎相关的帖子:

这些似乎都遵循相同的基本方法 - 使用循环来等待,直到满足所需的条件。

更新:事实证明,等待进程启动是不够的。在这种情况下,您需要等待该服务可用。您可能想查看以下帖子:

相关内容