Bildschirmsitzungen werden beendet, aber Prozesse sind weiterhin aktiv und werden ausgeführt.

Bildschirmsitzungen werden beendet, aber Prozesse sind weiterhin aktiv und werden ausgeführt.

Das ist eine seltsame Situation, in die ich geraten bin. Wir haben einen Testserver außerhalb unseres Standorts (oder außerhalb meines Arbeitsplatzes). Um auf den Server zuzugreifen, muss ich mich per VPN in sein Netzwerk einloggen.

Ich habe screen ausgeführt, um einen lang laufenden Prozess auszuführen. Nachdem ich den Prozess gestartet hatte, habe ich Folgendes getan, um die Funktionsfähigkeit von screen zu überprüfen:

  1. Ich habe mich von der Sitzung abgekoppelt
  2. screen -ls ausgeführt, um die PID zu überprüfen
  3. ps -ef | grep-Bildschirm
  4. Bildschirm -r PID

Ich konnte sehen, dass eine Bildschirmsitzung vorhanden war, nachdem ich diese Befehle ausgeführt und die Sitzung erneut verbunden/getrennt hatte.

Das ist das Seltsame daran. Ich komme am nächsten Tag zurück und es gibt keine Bildschirmsitzungen. Ich habe die oben genannten Befehle ausgeführt, um das zu überprüfen, aber es passiert nichts. Mein Prozess läuft jedoch noch. Ich habe kein Nohup verwendet, um meinen Prozess auszuführen, aber aus irgendeinem glücklichen Grund ist mein Prozess nicht mit der Sitzung beendet worden.

Weiß jemand, was passiert sein könnte? Warum habe ich meine Bildschirmsitzung verloren und warum hatte ich Glück und mein Prozess lief weiter?

Danke für jede Aufklärung. =)

Antwort1

Möglicherweise möchten Sie SCREENstattdessen „grep for“ verwenden, um zu überprüfen, ob Ihr Bildschirm wirklich nicht läuft.

Einige Systeme verfügen über temporäre Cleaner, die Dateien in /tmp, /var/tmp, /var/run, oder ähnlichem löschen. Dies kann dazu führen, dass screendie Socket-Dateien nicht gefunden werden können. Wenn Sie die PID Ihrer Sitzung identifizieren können, können Sie kill -CHLD <PID>dies tun screen, um die Socket-Datei neu zu schreiben. screen -rsollte dann wieder funktionieren.

Wenn dies der Fall ist, sollten Sie die Konfiguration so vornehmen, screendass für die Sockets ein anderes Verzeichnis verwendet wird.

Antwort2

Das ist mir und meinem Kollegen vor kurzem wieder passiert und er hat dies als möglichen Grund dafür vorgeschlagen. Er glaubt, dass die Firma unsere Verbindung zeitweise abschaltet und der Bildschirm dadurch abstürzt.

Wir hatten mehrere Screen-Sitzungen laufen, jede mit ihrem eigenen, lang laufenden Job (der Einfachheit halber nennen wir sie Sitzung A und B). Der Job in Sitzung A wurde vorzeitig beendet und diese Sitzung kehrte zur Eingabeaufforderung zurück. Als die Zeitüberschreitung aufgrund von Inaktivität ablief, wurden wir aus Sitzung A abgemeldet. Sitzung B führte ihren Job noch aus, als dies geschah, aber wir glauben, dass beim Beenden des übergeordneten Prozesses (in diesem Fall Screen) alle Sitzungen mitgenommen werden.

Der Prozess, der in Sitzung B ausgeführt wurde, wird jetzt vom übergeordneten Prozess des Bildschirms übernommen, bei dem es sich um den Init-Prozess oder Prozess 1 handelt, und läuft daher noch, als wir am nächsten Morgen nachgesehen haben.

Diese Hypothese wurde durch ein Experiment untermauert. Dieses wurde auf Centos ausgeführt. Wir starteten screen und öffneten zwei Sitzungen. In einer Sitzung führten wir regelmäßig einen cmd aus, um sie am Leben zu erhalten. Die andere ignorierten wir. Nach etwa 10 Minuten wurde screen beendet und damit auch beide Sitzungen, die wir geöffnet hatten.

verwandte Informationen