私は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
代わりに。