Pourquoi le terminal peut-il se désinstaller?

25

capture d'écran

Comment ça apt-get remove xtermpasse? Et après avoir été désinstallé, xtermne se ferme pas et continue de fonctionner normalement.

Le xtermprocessus est-il mis en cache dans la RAM pendant son exécution?

Huey
la source
6
Pour être exact, il ne se désinstalle pas vraiment - apt-getdésinstalle xtermet n'a aucune idée que cela dépend en quelque sorte d'un xtermprocessus - il s'agit donc de "Pourquoi xterm peut-il être désinstallé en cours d'exécution?". Bonne question.
Volker Siegel
2
Cela ressemble à la façon dont vous pouvez supprimer le disque dur lors de l'exécution du système d'exploitation.
jkd

Réponses:

53

Pas assez. Le fichier est déjà ouvert par le programme. La suppression du fichier (puis son remplacement par une autre version) n'affecte pas le programme en cours d'exécution car le fichier d'origine est maintenu ouvert (mais sans nom sur le disque pour l'ouvrir à nouveau) jusqu'à ce que le programme en ait fini avec lui. Ce n'est que lorsque toutes les poignées du fichier sont fermées que ses blocs de données sur le disque sont libérés. Jusque-là, le fichier ouvert peut être lu et écrit comme d'habitude - le seul changement est que personne d'autre ne peut l'ouvrir puisque son nom a été supprimé.

Bien que certaines parties du programme aient déjà été lues dans RAM lors de sa suppression, elles peuvent toujours être supprimées et relues plus tard, ou de nouvelles parties du programme qui n'avaient pas été précédemment exécutées peuvent toujours être chargées à partir du fichier supprimé.

psusi
la source
4
C'est la vraie raison .... c'est aussi la raison pour laquelle rm -rf /
ça
6
Si vous voulez utiliser le mot «fonctionne» pour décrire avec succès tout vissage. ;) Fait intéressant, rm -rf /ne fonctionnera pas si vous essayez de l'exécuter une deuxième fois immédiatement après;)
thomasrutter
1
J'ai souvent vu "/ certains / fichier / nom (supprimé)" en lsofsortie, et je sais que c'est à quoi ressemble un fichier 'zombie' ... mais est-il possible de sauver le contenu d'un tel fichier de disparaître quand le dernier descripteur de fichier meurt?
Kilian Foth
1
@KilianFoth, si vous pouvez trouver un processus qui a toujours le fichier ouvert, vous pouvez le copier depuis / proc / $ PID / fd / $ ID vers un autre fichier, mais je n'arrive pas à trouver un moyen de récupérer le fichier en place car toutes les tentatives de liaison matérielle du fichier échouent.
psusi
3
@KilianFoth S'il existe un descripteur de fichier, il rootest possible que vous puissiez lui attribuer un nom (et ainsi empêcher sa suppression) à l'aide de l' linkatappel système. Mais les exécutables et les bibliothèques sont mappés en mémoire, ce qui ne nécessite pas de descripteur de fichier. Je ne connais aucun moyen d'obtenir une poignée sur un fichier qui n'existe que parce qu'il est mappé en mémoire. Bien que les exécutables soient accessibles /procpendant leur exécution, ce ne sont que les bibliothèques et autres fichiers mappés en mémoire qui peuvent être au-delà de la récupération. Si vous souhaitez plus de détails à ce sujet, vous devez le poser comme une question distincte.
kasperd
8

Le xtermprocessus est-il mis en cache dans la RAM pendant son exécution?

Exactement. Il est similaire au processus qui vous permet d'installer des mises à jour de choses pendant qu'elles s'exécutent sans qu'elles ne se bloquent. Et aussi pourquoi vous devez redémarrer les services après les avoir mis à jour. Une fois que quelque chose tourne, son binaire est en mémoire.

Si cela dépend d'autres fichiers (qui ne sont pas dans un état «ouvert» maintenu) qui sont supprimés ou remplacés, cela pourrait causer des problèmes mais pour quelque chose d'aussi discret que xterm, ce n'est pas un problème.

Oli
la source
6
Pas tout à fait .. des parties du programme sont lues en mémoire uniquement lorsque cela est nécessaire, et peuvent être supprimées à tout moment pour libérer de la mémoire pour d'autres utilisations, et devront donc être relues plus tard (lorsque le programme essaiera d'accéder à ces parties) encore ).
psusi
17
Ce n'est pas nécessairement en RAM. Mais les fichiers ne sont pas réellement supprimés tant qu'ils ne sont pas ouverts, y compris l'exécutable xterm.
user253751
@immibis, donc, ma réponse;)
psusi
2

C'est en fait une caractéristique du fonctionnement des ordinateurs: lorsqu'un programme est appelé, il est en effet chargé dans la mémoire et il fonctionne à partir de là.

Un fichier fonctionne en fait de la même manière. Pour éviter les problèmes, de nombreux fichiers des systèmes UNIX créent des verrous.

L'énigme réelle est la raison pour laquelle vous ne pouvez pas faire des choses similaires et similaires dans Windows.

Cette fonctionnalité est en fait ce qui vous permet de mettre à jour l'ensemble du système, y compris les programmes actifs sur votre système. ;)

runlevel0
la source
+1 pour "l'inactivité réelle est la raison pour laquelle vous ne pouvez pas faire des choses semblables et similaires dans Windows"
arielf