Warum kann sich das Terminal selbst deinstallieren?

25

Bildschirmfoto

Wie geht apt-get remove xtermdas durch? Und nachdem es deinstalliert wurde, wird xtermes nicht geschlossen und funktioniert normal weiter.

Wird der xtermProzess im RAM zwischengespeichert, während er ausgeführt wird?

Huey
quelle
6
Um genau zu sein, es deinstalliert sich nicht wirklich von selbst - apt-getes deinstalliert xtermsich und hat keine Ahnung, dass es irgendwie von einem xtermProzess abhängt - es geht also um "Warum kann xterm während der Ausführung deinstalliert werden?". Gute Frage.
Volker Siegel,
2
Es ist ähnlich wie beim Ausführen des Betriebssystems, wie Sie die Festplatte löschen können.
JKD

Antworten:

53

Nicht ganz. Die Datei ist bereits vom Programm geöffnet. Das Löschen der Datei (und das anschließende Ersetzen durch eine andere Version) hat keine Auswirkungen auf das laufende Programm, da die ursprüngliche Datei geöffnet bleibt (allerdings ohne Namen auf der Festplatte, um sie erneut zu öffnen), bis das Programm damit fertig ist. Erst wenn alle Handles für die Datei geschlossen sind, werden die Datenblöcke auf der Festplatte freigegeben. Bis dahin kann die geöffnete Datei wie gewohnt gelesen und geschrieben werden. Die einzige Änderung besteht darin, dass sie von niemand anderem geöffnet werden kann, da ihr Name entfernt wurde.

Während Teile des Programms möglicherweise bereits beim Löschen in den RAM eingelesen wurden, können sie verworfen und später erneut eingelesen werden, oder neue Teile des Programms, die zuvor nicht ausgeführt wurden, können weiterhin aus der gelöschten Datei geladen werden.

Psusi
quelle
4
Das ist der eigentliche Grund ... das ist auch der Grund, warum es rm -rf /funktioniert ...
heemayl
6
Wenn du das Wort "funktioniert" verwenden willst, um zu beschreiben, wie erfolgreich alles total versaut ist. ;) Interessanterweise rm -rf /funktioniert es nicht, wenn Sie versuchen, es unmittelbar danach ein zweites Mal
auszuführen
1
Ich habe in der lsofAusgabe oft "/ some / file / name (deleted)" gesehen , und ich weiß, wie eine "Zombie" -Datei aussieht ... aber gibt es eine Möglichkeit, den Inhalt einer solchen Datei vor dem Verschwinden zu bewahren Wann stirbt das letzte Dateihandle?
Kilian Foth
1
@KilianFoth, wenn Sie einen Prozess finden, bei dem die Datei noch geöffnet ist, können Sie sie von / proc / $ PID / fd / $ ID in eine andere Datei kopieren, aber ich kann anscheinend keinen Weg finden, die Datei wiederherzustellen an Ort und Stelle, da alle Versuche, die Datei fest zu verknüpfen, fehlschlagen.
Psusi
3
@KilianFoth Wenn ein Datei-Handle vorhanden ist, kann rootmöglicherweise mithilfe des linkatSystemaufrufs ein Name für dieses Handle erstellt (und somit das Löschen verhindert) werden . Ausführbare Dateien und Bibliotheken sind jedoch speicherabgebildet, sodass kein Dateihandle erforderlich ist. Ich kenne keine Möglichkeit, eine Datei in den Griff zu bekommen, die nur existiert, weil sie speicherabgebildet ist. Auf ausführbare Dateien kann zwar /procwährend der Ausführung zugegriffen werden, es sind jedoch möglicherweise nur Bibliotheken und andere Speicherzuordnungsdateien, die nicht wiederhergestellt werden können. Wenn Sie weitere Details dazu wünschen, sollten Sie dies als separate Frage stellen.
Kasperd
8

Wird der xtermProzess im RAM zwischengespeichert, während er ausgeführt wird?

Genau. Es ähnelt dem Vorgang, mit dem Sie Updates für Dinge installieren können, während diese ausgeführt werden, ohne dass sie abstürzen. Und auch, warum Sie Dienste neu starten müssen, nachdem Sie sie aktualisiert haben. Sobald etwas ausgeführt wird, befindet sich seine Binärdatei im Speicher.

Wenn es von anderen Dateien abhängt (die sich nicht im Status "Offen" befinden), die entfernt oder ersetzt werden, kann dies zu Problemen führen xterm, dies ist jedoch kein Problem.

Oli
quelle
6
Nicht ganz. Teile des Programms werden nur bei Bedarf in den Speicher eingelesen und können jederzeit verworfen werden, um Speicher für andere Zwecke freizugeben. Sie müssen daher später erneut eingelesen werden (wenn das Programm versucht, auf diese Teile zuzugreifen) nochmal ).
Psusi
17
Es ist nicht unbedingt im RAM. Dateien werden jedoch erst gelöscht, wenn sie geöffnet sind, einschließlich der ausführbaren Datei xterm.
user253751
@immibis, daher meine Antwort;)
Psusi
2

Es ist in der Tat ein Merkmal der Funktionsweise von Computern: Wenn ein Programm aufgerufen wird, wird es tatsächlich in den Speicher geladen und von dort aus funktioniert es.

Eine Datei funktioniert tatsächlich genauso. Um Probleme zu vermeiden, erstellen viele Dateien in UNIX-basierten Systemen Sperren.

Das eigentliche Rätsel ist, warum Sie solche und ähnliche Dinge in Windows nicht ausführen können.

Mit dieser Funktion können Sie das gesamte System, einschließlich der in Ihrem System aktiven Programme, aktualisieren. ;)

runlevel0
quelle
+1 für "die tatsächliche Iddle ist, warum Sie solche und ähnliche Dinge in Windows nicht tun können"
Arielf