Jeder Prozess wird in der Ausgabe von aufgelistet ps aux
; ob rennen, schlafen, zombie oder stehen bleiben.
Da Sie den Prozess jedoch mit ausgeführt haben sh abc.sh
, sh
wird in Ihrem Fall die Anwendung (Shell) ausgeführt und nicht abc.sh
. Daher ps aux
wird der Prozess nicht enthalten, abc.sh
aufgrund dessen grep
kein Ergebnis erzielt werden konnte.
Die richtige Art und Weise, wie Sie es hätten verwenden sollen, ist wie folgt:
ps aux | grep sh
Dies gibt möglicherweise auch einen anderen Prozess zurück, bei dem die Zeichenfolge an einer sh
beliebigen Stelle in der Ausgabe von ausgeführt wird ps aux
.
Sie sollten beachten , dass der Prozess „läuft“ wird, wenn der Ausgang von ps aux
seinem hat STAT
wie R
. Wenn es sich um etwas anderes handelt, wird es nicht in der Instanz ausgeführt, in der Sie den Befehl zum Überprüfen der ausgeführten Prozesse ausgelöst haben. Die verschiedenen Prozesszustände finden Sie in der Manpage für ps:
D uninterruptible sleep (usually IO)
R running or runnable (on run queue)
S interruptible sleep (waiting for an event to complete)
T stopped, either by a job control signal or because it is being traced
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z defunct ("zombie") process, terminated but not reaped by its parent
Sie können auch den top
Befehl ausführen, um zu überprüfen, ob der Prozess ausgeführt wird oder sich im Ruhezustand befindet und wie viel CPU und RAM er verbraucht. (Dies listet Ihren Prozess erneut auf als sh
).
Wenn Sie jedoch möchten, dass Ihr Prozess als aufgeführt wird abc.sh
, sollten Sie die erste Zeile des Skripts haben, als das Sie ausgeführt werden:
#!/bin/sh
Damit die Shell weiß, welche Anwendung zum Ausführen des Skripts verwendet werden soll (in diesem Fall sh, ändern Sie es in #!/bin/bash
für Bash) und stellen Sie dann dem Prozess ausführbare Berechtigungen zur Verfügung, indem Sie Folgendes verwenden:
chmod +x /path/to/abc.sh
Ersetzen /path/to/
mit dem Speicherort der abc.sh
Datei und führen Sie dann abc.sh
mit
/path/to/abc.sh
erneut durch /path/to/
den Speicherort der abc.sh
Datei ersetzen .
S+
bedeutetps aux | grep filename
Befehls feststellen .Mein Problem dabei
grep
ist, dass es ein ganzzeiliger Parser ist. In Ihrem Beispiel suchen Sie nach "abc", ziehen jedoch die Instanz von zurückgrep
(dh "abc"). Ein bisschen kreisförmig. Sie können das herausfiltern, aber ich finde das alles etwas pervers.Ich würde mich
awk
für ein wenig Schnickschnack wenden .awk
Teilt die Zeilen basierend auf dem Leerzeichen in Felder auf (standardmäßig). Felder $ 11 + sind die Befehlsspalte (n). Wenn also der Befehl "sh abc.sh ..." lautet,$11
wirdsh
und$12
wird dies seinabc.sh
.Wenn Sie den Ausgang oder die Kette mit den Tasten
&&
und steuern möchten||
Operatoren , können Sie, aber Sie müssen ein bisschen schlauer sein.grep
Wird mit Statuscode 1 beendet (technischer Fehler, Auslöser||
), wenn nichts gefundenawk
wird. Wird jedoch immer mit Code 0 beendet. Sie können dies ändern, indem Sie angeben, dass der Vorgang beendet werden soll, wenn etwas gefunden wird, und eine 1 auslösen, wenn dies nicht der Fall ist:Wenn Sie nur die Ausgabe auf den Bildschirm schreiben möchten, können Sie dies natürlich auf folgende Weise tun
awk
:quelle
Der richtige Weg, um in der aktuellen Bash-Sitzung zu prüfen, ob ein Prozess im Hintergrund gestartet wurde, wie z
sh abc.sh &
bereits ausgeführt wird oder nicht, besteht in der Verwendung desjobs
integrierten Befehls.Beispiel:
Das bedeutet, dass der
sh abc.sh
im Hintergrund gestartete Prozess ausgeführt wird. Wenn der Vorgang abgeschlossen ist, wird Folgendes angezeigt:Wenn im Hintergrund mehrere Prozesse ausgeführt werden, können Sie die Ausgabe nur auf den
sh abc.sh
Prozess beschränken, indem Sie Folgendes verwenden:Siehe
help jobs
für weitere Informationen.Die obige Methode funktioniert nur in der aktuellen Bash-Sitzung. Wenn Sie sich jedoch in einer anderen Bash-Sitzung befinden (z. B. in einem anderen Terminalfenster oder einer anderen Registerkarte oder in einem Skript), abgesehen von:
Sie können auch verwenden:
was mir einfacher erscheint. Wenn Sie Ihren eingegebenen Befehl in der Ausgabe sehen (
sh abc.sh
in diesem Fall), bedeutet dies, dass der Prozess noch ausgeführt wird. Wenn nicht, ist der Vorgang beendet.quelle
Wenn Ihr Skript gerade ausgeführt wird, muss es per
ps aux
Befehl angezeigt werden . Wenn es nicht von angezeigt wirdps
, ist möglicherweise Ihre Skriptausführung derzeit beendet.Eine Ausgabe
ps
wie diese bedeutet, dass Ihr Skript derzeit nicht ausgeführt wird.Wenn dies so angezeigt wird, wird Ihr Skript gerade ausgeführt.
Es basiert alles auf dem Inhalt des Skripts.
Zum Beispiel, wenn Sie ein solches Skript erstellen. Es zeigt die Meldung HI bei der Ausführung an. Es dauert einige Sekunden, bis die Ausgabe angezeigt und beendet wird, nachdem das Endergebnis erstellt wurde.
Aber wenn Ihr Skript so ist,
Es dauert einige Minuten, bis der Vorgang beendet ist. Wenn Sie in der Zwischenzeit den
ps aux | grep filename
Befehl ausführen , wird er in der Ausgabe angezeigt. Weil das Skript gerade läuft.quelle
Wenn Sie alle Prozesse überprüfen möchten, verwenden Sie 'top'.
Wenn Sie wissen möchten, welche Prozesse von Java ausgeführt werden, verwenden Sie
ps -ef | grep java
wenn andere verfahren dann einfach nutzen
ps -ef | grep xyz
oder einfach/etc/init.d xyz status
wenn durch irgendeinen Code wie
.sh
dann./xyz.sh status
quelle
Wenn Sie nur überprüfen möchten, ob ein Vorgang ausgeführt wird, gehen Sie in dieses Verzeichnis und geben
ll -tr
Sie ein, ob am Ende der Datei ein.csv
oder.work
usw. angezeigt wird. Andernfalls wird der Vorgang ausgeführt.quelle
.csv
gilt für durch Kommas getrennte Dateien, die nicht mit einem laufenden Prozess zusammenhängen.