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에 대한 호출 후에 를 추가 하면 notification-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초의 절전 시간보다 오래 걸리는 경우).

비슷한 게시물 몇 개를 온라인에서 검색한 결과 관련성이 있어 보이는 몇 가지 게시물을 찾았습니다.

이것들은 모두 동일한 기본 접근 방식을 따르는 것으로 보입니다. 즉, 원하는 조건이 충족될 때까지 루프를 사용하여 기다리는 것입니다.

고쳐 쓰다:프로세스가 시작되기를 기다리는 것만으로는 충분하지 않습니다. 이 경우 서비스가 제공될 때까지 기다려야 합니다. 다음 게시물을 확인해 보세요.

관련 정보