Wie überprüfe ich mit einem Bash-Skript, ob eine Anwendung ausgeführt wird?

Wie überprüfe ich mit einem Bash-Skript, ob eine Anwendung ausgeführt wird?

Ich habe eine Gnome-Run-Anwendung in meinem Home-Ordner. Ich habe jetzt die Anwendung hinzugefügt, die ausgeführt wird, wenn ich Meta+ drücke R(ich habe sie inCCSM). Ich führe die Anwendung aus, indem ich sie ./gnome-runin meinem Home-Ordner ausführe.
Ich kann in der Ausgabe von keine Spur des Anwendungsprozesses finden ps -A.

Das Problem ist, dass ich das Programm „gnome-run“ geöffnet habe und die Tastenkombination drücke, mit der ich die Anwendung schließen möchte. Gibt es eine Möglichkeit, eine Bash-Datei zu erstellen, die prüft, ob die Anwendung ausgeführt wird? Wenn ja, schließen Sie sie, andernfalls starten Sie sie.

Antwort1

Dieses Shell-Skript sollte das Starten und Stoppen beliebiger Programme handhaben:

#!/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

Nehmen wir an, Sie haben es unter gespeichert ~/mystarter. Dann können Sie damit jeden beliebigen Befehl ausführen, indem Sie verwenden ~/mystarter <name>, in Ihrem Fall beispielsweise bind Meta+ Rto:

~/mystarter gnome-run

und stellen Sie sicher, dass das Skript ausführbar ist: chmod u+x ~/mystarter. Außerdem ist es wahrscheinlich am besten, es irgendwo in Ihrem abzulegen PATH, damit Sie nicht jedes Mal den vollständigen Speicherort eingeben müssen.

Wenn dies gnome-runnicht in angezeigt wird ps -A, stellen Sie sicher, dass Gnome Run selbst kein Skript ist, das den eigentlichen Prozess startet. Überprüfen Sie, ob es einen Unterschied zwischen ps -A | wc -lvor und nach dem Start gibt (dies zählt alle laufenden Prozesse).

Bearbeiten:

Da Sie die Antwort akzeptiert haben, dachte ich, ich würde Unterstützung für das Ausführen von Befehlen mit Befehlszeilenargumenten hinzufügen, sodass dies zu einer Referenzstelle werden könnte. Führen Sie einen Befehl wie folgt aus:

 ./mystarter 'cmd args'

z.B:

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

Der Befehl prüft lediglich, ncmpcppob er bereits ausgeführt wird, führt jedoch den vollständigen Befehl (mit Argumenten) aus, wenn ncmpcpper nicht ausgeführt wird.

verwandte Informationen