アプリケーションが実行中かどうかを Bash スクリプトで確認するにはどうすればよいですか?

アプリケーションが実行中かどうかを Bash スクリプトで確認するにはどうすればよいですか?

ホームフォルダにgnome-runアプリケーションがあります。Meta+を押したときに実行されるアプリケーションを追加しましたR国際./gnome-run) 。ホーム フォルダーで実行してアプリケーションを実行します。
の出力にアプリケーション プロセスの痕跡が見つかりませんps -A

問題は、gnome-run プログラムを開いて、アプリケーションを閉じるキーの組み合わせを押すと、アプリケーションが閉じてしまうことです。アプリケーションが実行中かどうかを確認する bash ファイルを作成する方法はありますか? 実行中の場合は閉じ、そうでない場合は起動します。

答え1

このシェル スクリプトは、あらゆるプログラムの起動と停止を処理する必要があります。

#!/bin/bash

BASECMD=${1%%\ *}
PID=$(pgrep "$BASECMD")
if [ "$?" -eq "0" ]; then
    echo "at least one instance of "$BASECMD" found, killing all instances"
    kill $PID
else
    echo "no running instances of "$BASECMD" found, starting one"
    $1
 fi

たとえば、 の下に保存した場合~/mystarter、 を使用して任意のコマンドを実行できます~/mystarter <name>。たとえば、この場合は、Meta+Rを次のようにバインドします。

~/mystarter gnome-run

スクリプトが実行可能であることを確認してください: chmod u+x ~/mystarter。また、スクリプトを のどこかに置くのがおそらく最善ですPATH。そうすれば、毎回完全な場所を入力しなくても済みます。

gnome-runに表示されないという事実についてはps -A、gnome run 自体が実際のプロセスを起動するスクリプトではないことを確認してください。起動前と起動後の違いがあるかどうかを確認してくださいps -A | wc -l(これは実行中のすべてのプロセスをカウントします)。

編集:

回答を受け入れていただいたので、コマンドライン引数を持つコマンドの実行のサポートを追加して、ここが参考になるようになればと思いました。次のようにコマンドを実行します。

 ./mystarter 'cmd args'

例えば:

./mystarter 'ncmpcpp -c ~/.ncmpcpp'

コマンドは、すでに実行されているかどうかを確認するだけですが、実行されていないncmpcpp場合は完全なコマンド (引数付き) を実行します。ncmpcpp

関連情報