
저는 GUI 프로그램을 실행하고 있습니다.열광(src에서 컴파일) 실행 파일에 스크립트(zeal.sh)를 추가합니다.
#!/bin/bash
if pgrep zeal &>/dev/null; then
printf "already on\n"
else
~/tools/zeal/zeal/zeal &>/dev/null &
fi
이상한 점은 이 스크립트를 이와 같이 실행할 때 /path/to/zeal.sh
항상 "이미 시작됨"이라는 메시지가 표시되는 반면, bash /path/to/zeal.sh
이를 사용하면 프로세스가 실행 중인지 올바르게 판단한다는 것입니다.
또한 유사한 스크립트(예: Firefox)를 사용하여 다른 GUI 프로그램을 검사했는데 제대로 작동합니다.
그렇다면 이런 일이 어떻게 발생하며 어떻게 해결합니까?
답변1
Hauke의 답변에서 제안된 긴 옵션은 --exact
일부 시스템에서는 작동하지 않습니다. 대신 동등한 짧은 옵션을 사용할 수 있습니다 -x
.
#!/bin/bash
if pgrep -x "zeal" > /dev/null
then
echo "Running"
else
echo "Stopped"
fi
답변2
문제는 직접 호출이 스크립트 이름을 명령 이름으로 만든다는 것입니다.
cat /proc/$PID/comm
결과적으로 pgrep
일치합니다. 를 통해 호출되는 경우 bash
명령 이름은 "bash"입니다.
사용
pgrep --exact zeal
대신에.