jobs -l sollte Ihnen die PID für die Liste der Nohup-Prozesse geben. Töten (-9) Sie sie sanft.;)
Ich verwende Red Hat Linux auf einem VPS-Server (und über SSH - Putty), für mich hat Folgendes funktioniert:
Zunächst listen Sie alle laufenden Prozesse auf:
ps -ef
Dann finden Sie in der ersten Spalte Ihren Benutzernamen; Ich habe es die folgenden drei Mal gefunden:
- Eine davon war die SSH-Verbindung
- Die zweite war eine FTP-Verbindung
- Der letzte war der Nohup-Prozess
Dann finden Sie in der zweiten Spalte die PID des nohup-Prozesses und Sie geben nur ein:
kill PID
(Ersetzen der PID natürlich durch die PID des nohup-Prozesses)
Und das ist es!
Ich hoffe, dass diese Antwort für jemanden nützlich ist. Ich bin auch sehr neu in Bash und SSH, habe aber 95 % des Wissens, das ich brauche, hier gefunden :)
Angenommen, ich führe ein Ruby-Skript im Hintergrund mit dem folgenden Befehl aus
nohup ruby script.rb &
dann kann ich die PID des obigen Hintergrundprozesses abrufen, indem ich den Befehlsnamen angebe. In meinem Fall ist der Befehl ruby.
ps -ef | grep ruby
Ausgabe
ubuntu 25938 25742 0 05:16 pts/0 00:00:00 ruby test.rb
Jetzt können Sie den Prozess einfach beenden, indem Sie den Befehl kill
verwendenkill 25938
Bei Verwendung von nohup
und Sie stellen die Aufgabe in den Hintergrund, den Hintergrundoperator (&
) gibt Ihnen die PID an der Eingabeaufforderung. Wenn Sie den Prozess manuell verwalten möchten, können Sie diese PID speichern und später verwenden, um den Prozess bei Bedarf über kill PID
zu beenden oder kill -9 PID
(wenn Sie das Töten erzwingen müssen). Alternativ finden Sie die PID später unter ps -ef | grep "command name"
und suchen Sie die PID von dort. Beachten Sie, dass nohup
Schlüsselwort/Befehl selbst erscheint nicht in ps
Ausgabe für den betreffenden Befehl.
Wenn Sie ein Skript verwenden, können Sie im Skript so etwas tun:
nohup my_command > my.log 2>&1 &
echo $! > save_pid.txt
Dadurch wird my_command
ausgeführt Speichern der gesamten Ausgabe in my.log
(in einem Skript $!
stellt die PID des zuletzt ausgeführten Prozesses dar). Die 2
ist der Dateideskriptor für Standardfehler (stderr
) und 2>&1
weist die Shell an, die Standardfehlerausgabe an die Standardausgabe weiterzuleiten (Dateideskriptor 1
). Es erfordert &1
damit die Shell weiß, dass es sich in diesem Kontext um einen Dateideskriptor handelt und nicht nur um eine Datei namens 1
. Die 2>&1
wird benötigt, um alle Fehlermeldungen zu erfassen, die normalerweise als Standardfehler in unseren my.log
geschrieben werden Datei (die von der Standardausgabe kommt). Siehe E/A-Umleitung für weitere Details zur Handhabung der E/A-Umleitung mit der Shell.
Wenn der Befehl regelmäßig Ausgaben sendet, können Sie die Ausgabe gelegentlich mit tail my.log
überprüfen , oder wenn Sie es "live" verfolgen möchten, können Sie tail -f my.log
verwenden . Wenn Sie schließlich den Prozess beenden müssen, können Sie dies tun über:
kill -9 `cat save_pid.txt`
rm save_pid.txt