So erhalten Sie eine Liste der Programme, die mit nohup ausgeführt werden


80

Ich greife auf einen Server mit CentOS (Linux Distribution) mit einer SSH-Verbindung zu. Da ich nicht immer angemeldet bleiben kann, verwende ich "nohup [Befehl] &", um meine Programme auszuführen.

Ich konnte nicht finden, wie ich eine Liste aller Programme bekomme, die ich mit nohup gestartet habe. "jobs" funktioniert erst, bevor ich mich abmelde. Wenn ich mich danach erneut anmelde, zeigt mir der Befehl jobs nichts an, aber ich kann in meinen Protokolldateien sehen, dass meine Programme noch ausgeführt werden.

Gibt es eine Möglichkeit, eine Liste aller Programme zu erhalten, die ich mit "nohup" gestartet habe?


Ich habe einen ausgezeichneten Artikel gefunden, der bei der Frage helfen kann: cyberciti.biz/faq/… . Vor allem ist es hilfreich, wenn Sie die Ausgabe des Befehls ps interpretieren können, insbesondere die Spalte stat. Wenn nicht, lies den Artikel JETZT ;-)
jump_monkey

Antworten:


113

Als ich anfing mit $ nohup storm dev-zookeper,

Methode 1: Verwenden von jobs,

prayagupd@prayagupd:/home/vmfest# jobs -l
[1]+ 11129 Running                 nohup ~/bin/storm/bin/storm dev-zookeeper &

METHODE2: Verwenden des psBefehls.

$ ps xw
PID  TTY      STAT   TIME COMMAND
1031 tty1     Ss+    0:00 /sbin/getty -8 38400 tty1
10582 ?        S      0:01 [kworker/0:0]
10826 ?        Sl     0:18 java -server -Dstorm.options= -Dstorm.home=/root/bin/storm -Djava.library.path=/usr/local/lib:/opt/local/lib:/usr/lib -Dsto
10853 ?        Ss     0:00 sshd: vmfest [priv] 

TTY-Spalte mit ?=> nohuplaufenden Programmen.

Beschreibung

  • TTY-Spalte = das dem Prozess zugeordnete Terminal
  • STAT-Spalte = Status eines Prozesses
    • S = unterbrechbarer Schlaf (Warten auf Abschluss eines Ereignisses)
    • l = ist Multithread-fähig (mit CLONE_THREAD, wie es NPTL-Pthreads tun)

Referenz

$ man ps # dann suchen /PROCESS STATE CODES


5
Methode 2 listet nicht die Programme auf, mit denen gestartet wurdenohup . Es werden die Prozesse aufgelistet, die nicht an ein TTY angehängt sind. Dies ist eine völlig andere Sache: Prozesse, mit denen begonnen wurde, nohupbleiben an das übergeordnete TTY gebunden, bis es geschlossen wird. Prozesse, die nicht an ein TTY gebunden sind, wurden nicht unbedingt gestartet nohup. Das heißt, Verfahren 2 Listen, unter anderem Prozesse, einige der Programme laufen mit nohup.
Arcturus B

4
Jobs funktionieren nicht für mich, funktionieren nur für dieselbe SSH-Sitzung. Wenn ich die Verbindung
trenne

29

Stattdessen nohupsollten Sie verwenden screen. Es wird das gleiche Ergebnis erzielt - Ihre Befehle werden "getrennt" ausgeführt. Sie können jedoch Bildschirmsitzungen fortsetzen und zu ihrem "versteckten" Terminal zurückkehren und die jüngsten Fortschritte in diesem Terminal anzeigen.

screenhat viele Möglichkeiten. Am häufigsten benutze ich diese:

So starten Sie die erste Bildschirmsitzung oder übernehmen die letzte getrennte Sitzung:

screen -Rd 

So trennen Sie sich von der aktuellen Sitzung: Ctrl+ACtrl+D

Sie können auch mehrere Bildschirme starten - lesen Sie die Dokumente.


6
Scheint eine gute Alternative zu mir zu sein. Ich fand auch heraus, dass ich die PIDs mit "ps auwx" finden konnte
Nils De Winter

7
Frage klar gefragt Gibt es eine Möglichkeit, eine Liste aller Programme zu erhalten, die ich mit "nohup" gestartet habe? Diese Antwort spricht die Frage jedoch nicht einmal geringfügig an. Warum wird es akzeptiert?
Luke Joshua Park

3
Denn 2013 war es die einzige Antwort, die geholfen hat.
Nils De Winter

21

Wenn Sie eine Standardausgabe haben, die zu "nohup.out" umgeleitet wird, sehen Sie einfach, wer diese Datei verwendet

lsof | grep nohup.out

1
Das ist ein kluger Weg. In meinem Fall liefert dies jedoch keine Ergebnisse. Obwohl ich sicher bin, dass der Befehl nohup noch ausgeführt wird und die Datei nohup.out verwendet.
Julius Š.

1
Es ist in allen TTY in Ordnung, aber zeige doppelten Prozess für jedes Nohup!
Nabi KAZ

@ NabiK.AZ von man lsof: "Im Allgemeinen erben Threads und Tasks die Dateien des Aufrufers, können jedoch einige schließen und andere öffnen, sodass lsof immer alle geöffneten Dateien von Threads und Tasks meldet." Ich konnte keine Informationen über nohup in seinem Mann finden, aber es scheint, dass es zwei Threads verwendet, nicht einen.
Jaroslaw Nikitenko

5

Sie können nicht genau eine Liste der Befehle erstellen, mit nohupdenen begonnen wurde, aber Sie können sie zusammen mit Ihren anderen Prozessen anzeigen, indem Sie den Befehl verwenden ps x. Befehle, mit denen begonnen wurde nohup, haben ein Fragezeichen in der Spalte TTY.


3
"ps x" hat nicht geholfen, aber ich habe herausgefunden, dass "ps auxw" funktioniert.
Nils De Winter

5

Sie können auch einfach den Befehl top verwenden und Ihre Benutzer-ID zeigt die ausgeführten Jobs und deren Zeiten an.

$ top

(Dies zeigt alle laufenden Jobs an.)

$ top -U [user ID]

(Dies zeigt Jobs an, die für die Benutzer-ID spezifisch sind.)


Das Schöne daran ist außerdem, dass es auf Ihrer Konsole bleibt, sodass Sie den Job sehen und wissen können, wann er beendet ist
rgilligan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.