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

Was passiert mit der Ausgabe eines Prozesses, der enteignet wurde und sein Terminal verloren hat?

Wenn ich das virtuelle Terminal schließe, wo irgendein Prozess gestartet wurde, geht die Ausgabe einfach direkt zu /dev/null , oder kann es irgendwie den Speicher verschmutzen?
Kann ich trotzdem die Ausgabe abrufen, um sie später weiterzulesen?

[EDIT]:Ist der Moment, in dem ich einen Prozess verleugne, effektiv das Ende meiner Macht, seine Ausgabe zu kontrollieren?

Mir ist auch aufgefallen, dass wenn ich einen gestoppten Prozess verleugne, zunächst alles normal erscheint:er wird weder beendet noch in Jobs angezeigt. Aber wenn ich mich abmelde (und ich nicht bedeutet, schließen Sie das Terminal, verlassen Sie einfach su , zum Beispiel), wird der Prozess beendet. Trotzdem kann ein im Hintergrund laufender disowner Prozess weiterlaufen.

Akzeptierte Antwort:

Die Tatsache, dass ein Prozess „abgelehnt“ wird, hat nur eine Bedeutung für die interaktive Shell, die diesen Prozess erstellt hat. Das bedeutet, dass die Shell den Prozess nicht (mehr) in ihre Jobs-Tabelle aufnimmt und dass beim Beenden der Shell kein SIGHUP an diesen Prozess gesendet wird. Es hat nicht wirklich etwas mit Ihren Fragen zu tun.

Was mit den Ausgaben passiert, die an ein gelöschtes virtuelles Terminal gesendet werden:Ich habe selbst einige Tests durchgeführt und festgestellt, dass /dev/pts/x Geräte sind nicht zugänglich und werden nicht wieder zugewiesen, bis alle Dateideskriptoren, die auf sie verweisen, geschlossen wurden. Ich sehe also keinen Grund, warum Schreibvorgänge an einem gelöschten Terminal gespeichert werden sollten. Ich schätze, das ist nicht einmal von POSIX definiert.

Ich glaube nicht, dass es möglich ist, die Ausgabe eines Prozesses zu erfassen, der in ein Terminal schreibt, selbst wenn das Terminal noch am Leben ist¹. Alles, was Sie tun können, ist, die direkte Eingabe an das Terminal zu greifen (d. H. Tastenanschläge oder simulierte Tastenanschläge durch den Master-Teil eines Pty). Wenn Prozesse auf stdin lesen würden, was in ihre Terminals geschrieben wird, würde das für die meisten Prozesse zu einer Selbst-IO-Schleife führen.

Was die letzte Bemerkung zur Prozessbeendigung betrifft, weiß ich nicht wirklich, was passiert, aber ich würde ziemlich seltsame Verhaltensweisen mit Signalen (SIGTTU, SIGTTIN, SIGHUP oder andere) vermuten, die sich auf den Vordergrund-/Hintergrundstatus von Prozessgruppen beziehen, wenn die Sitzung Leader-Exits (z. B. su , in dem von Ihnen erwähnten Fall).

Antwort auf die Bearbeitung: Nein, in Bezug auf die Ausgabe ändert sich nichts, wenn ein Prozess enteignet wird:Er ist immer noch mit seinem steuernden Terminal verbunden (es sei denn, er hat sich bereits getrennt, wie es Dämonen tun). Sie können das mit ps sehen . Sie können fg jedoch nicht verwenden /bg /jobs Befehle, die die Shell für diesen Vorgang bereitstellt, nicht mehr. Das bedeutet, dass es schwierig sein könnte, es mit Eingaben vom Terminal zu füttern (muss in der Vordergrundprozessgruppe sein).

Verwandte:Entfernen von Steuerzeichen (einschließlich Konsolencodes / -farben) aus der Skriptausgabe?



Linux
  1. Der Befehl „java“ führt die installierte JVM nicht aus

  2. Was ist der Unterschied beim Umleiten einer Ausgabe mit >, &>, >&und 2&>?

  3. Was ist die Definition einer Sitzung unter Linux?

  4. Was ist der Unterschied zwischen ls und l?

  5. Wie man die Gesamtressourcen (Speicher) eines Prozesses und seiner Kinder begrenzt

Welche Beziehungen bestehen zwischen dem aktuellen Steuerterminal und `/dev/tty`?

Was bedeutet in der Ausgabe von Ps?

SIGTERM vs. SIGKILL:Was ist der Unterschied?

Was ist der Unterschied zwischen OUTPUT- und FORWARD-Ketten in iptables?

Was ist der Unterschied zwischen kill, pkill und killall?

Was passiert, wenn eine Datei, die zu 100 % in den Seitencache eingelagert ist, von einem anderen Prozess geändert wird