特定のプログラムが開いているかどうかを確認する方法

特定のプログラムが開いているかどうかを確認する方法

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))

pgrepPOSIX によって定義されていません。たとえば、最近まで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リダイレクトも必要です。

関連情報