![laufenden Prozess prüfen](https://rvso.com/image/23957/laufenden%20Prozess%20pr%C3%BCfen.png)
Ich werde aufgefordert, Prozesse zu prüfen und zu beenden, mit denen ich nicht vertraut bin. Wenn ich also ls
im Bin-Ordner bin, sehe ich mehrere Prozesse .sh
. Aber ich möchte wissen, welcher Prozess mit welchem Tomcat-Prozess verknüpft ist.
Gibt es eine einfache Möglichkeit, das herauszufinden?
Beispiel startmyprocess1.sh
, aber wenn ich das tue, ps -ef | grep startmyprocess1
wird der laufende Prozess nicht zurückgegeben.
Aber tatsächlich lautet der Name des laufenden Tomcat-Prozesses myprocess
, wenn ich also tue ps -ef | grep myprocess
, kann ich den laufenden Prozess sehen. Um das herauszufinden, muss ich die verantwortliche Person fragen.
Die Namen sind also unterschiedlich. Wenn das so ist, muss ich ihn mehrmals fragen. Gibt es eine bessere Möglichkeit, das herauszufinden?
Antwort1
versuchen Sie dieses hier... (nicht getestet)
ps -aux | grep "yourprocess"
Zum Beispiel,
ps -aux | grep "httpd"
Antwort2
Das Starten von myprocess innerhalb von startmyprocess.sh führtnichtBenennen Sie den Prozess nach dem zugrunde liegenden Shell-Skript. Deshalb ps -ef | grep startmyprocess1
gibt Ihr Prozess kein Ergebnis zurück.
Aus diesem Grund schreiben viele Prozesse, insbesondere Daemons, ihre PID in eine Datei, damit Sie leicht auf den Prozess verweisen können. Dies kann folgendermaßen erfolgen:
#!/bin/sh
pid=`myprocess`
echo $pid > /tmp/myprocess.pid
oder Sie können abfragen $!
, welche die letzte PID enthält:
#!/bin/sh
myprocess
echo $! > /tmp/myprocess.pid
und fragen Sie den Prozess anhand seiner PID ab/listen Sie ihn auf:
ps --pid $PID
Antwort3
Ich denke, Software wie „top“ wird großartige Arbeit leisten.
Typ:
top
oder
htop
Antwort4
Die Antwort von @invert hat viel erklärt, Shell-Skripts führen nur Befehle darin aus. Das bedeutet, dass Sie bei der Ausgabe von top
oder nicht den Namen Ihres Shell-Skripts erhalten htop
, sondern nur /proc/$PID/cmdline jeder Routine innerhalb des Shell-Skripts ausdrucken.
Außerdem verwende ich echo $!
den Befehl after, um die PID dessen zu erhalten, was Sie möchten. Ich würde gerne den Befehl verwenden, pgrep
wenn ich ihn brauche (oder pkill, wenn Sie ihn beenden möchten).
pgrep, pkill – Prozesse anhand von Namen und anderen Attributen nachschlagen oder signalisieren
Das pgrep grept einfach Ihre Argumente über /proc/*/cmdline und gibt passende PIDs aus. Das pkill ist mit kill kompatibel, so dass Sie jede Routine einfach mit der cmdline pkillen können.