GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie bekomme ich die Prozess-ID, um einen Nohup-Prozess zu beenden?

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

verwenden
kill 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

Linux
  1. Wie erhalte ich den Pfad eines Prozesses in Unix / Linux

  2. Wie bekomme ich die Befehlszeilenargumente an einen laufenden Prozess auf Unix/Linux-Systemen übergeben?

  3. So beenden Sie den Zombie-Prozess

  4. Wie bekomme ich PID nach Prozessname?

  5. Wie bekomme ich nur den Benutzer, die PID und den Befehl, der für einen bestimmten Prozess ausgeführt wird? (Ubuntu 11.10)

So beenden Sie einen Prozess in Linux

So finden Sie die Prozess-ID eines Programms und beenden es [Kurztipp]

Wie man einen Prozess unter Linux beendet

So beenden oder beenden Sie einen Linux-Prozess:Der ultimative Leitfaden

So finden Sie die PID und PPID eines Prozesses in Linux

So finden Sie die .pid-Datei für einen bestimmten Prozess