1
端末のコマンドラインを使用して、プログラム(FirefoxやChromiumなど)が開いているかどうかを表示したいと思います0
。
編集:「開く」とは、「現在のコンピュータで実行されていて、私が見たXサーバーでウィンドウが開いている」ことを意味します。
答え1
xwininfo -root -children | grep -q '"Firefox")'
echo "$(($? == 0))"
Xサーバーに接続されているクラスウィンドウがある場合Firefox
(すべてのコンピュータのすべてのユーザーによって)1が出力されます。
Firefox プロセスをこのコマンドを実行するコンピュータに制限するには:
xwininfo -root -children |
awk '/"Firefox"\)/{print $1}' |
xargs -I% xprop -id % WM_CLIENT_MACHINE |
cut -d\" -f2 |
grep -qFx "$(uname -n)"
プロセス名で検索しても、プロセスが実際にウィンドウを表示するという保証はありません。あなたのXサーバー。
上記のアプローチは、オプションが渡されていないときにFirefoxが現在実行されているFirefoxを確認する方法と一致しています--no-remote
。
答え2
pgrep -x chromium
などのプロセス名は一致せず、chromium-foo
次のよう> /dev/null
に置き換えることができます-q
。
pgrep -xq chromium; echo $(($? == 0))
pgrep
POSIX によって定義されていません。たとえば、最近までOS Xには含まれていません。ただし、以下を使用することもできますps
。
ps -eo comm= | grep -xq chromium; echo $(($? == 0)) # GNU
ps -eco comm= | grep -xq chromium; echo $(($? == 0)) # OS X
ps -eo comm= | sed 's|.*/||' | grep -xq chromium; echo $(($? == 0)) # either
OS Xでは、-o comm
コマンドの絶対パスを印刷し、-co comm
デフォルト名を印刷します。デフォルト名はGNUとして印刷され、-o comm
定義-c
されていません。
答え3
特定の名前のプロセスが現在実行中であるかどうかを確認する方法はいくつかあります。 1つは使用するpgrep
こと、もう1つは次のものを使用することですps
。
pgrep "chromium" >/dev/null 2>&1 && echo 1 || echo 0
ps aux | grep "[c]hromium" >/dev/null 2>&1 && echo 1 || echo 0
grep "[c]hromium" <(ps aux) >/dev/null 2>&1 && echo 1 || echo 0
このpgrep
コマンドは、名前でプロセスを検索し、その引数に一致するすべてのプロセスのPIDを表示します。ここでは、pgrep
出力(およびにリダイレクト)の代わりに戻り値が使用されるため、一致するものがあるかどう/dev/null
かがわかります。このgrep
コマンドは一致も表示するため、stdout
リダイレクトも必要です。