Linux : suppression d'un programme (fichier) pendant qu'il s'exécute

Linux : suppression d'un programme (fichier) pendant qu'il s'exécute - Divers - Linux et OS Alternatifs

Marsh Posté le 13-01-2011 à 16:19:30    

Bonjour,
 
J'ai pu constater sur certaines machines sous Linux qu'on peut remplacer un programme (son fichier), alors qu'il est en train de s'exécuter. J'imagine qu'il est chargé intégralement en mémoire et que le fichier n'est donc pas ouvert pendant l'exécution, ce qui rend ainsi possible la suppression du fichier.
 
Or, j'ai pu aussi constater qu'avec certaines distributions, le fait de pouvoir supprimer ou remplacer un fichier programme pendant son exécution ne marche plus. (J'espère que je suis assez clair...)
 
Quelqu'un sait-il à quoi est lié ce mécanisme, et comment l'activer ou le désactiver ?
 
Merci d'avance.

Reply

Marsh Posté le 13-01-2011 à 16:19:30   

Reply

Marsh Posté le 13-01-2011 à 20:53:43    

je peux me tromper mais il me semble que tant qu'un fichier est ouvert, il n'est pas réellement supprimé du disque (l'inode n'est pas libéré). Même si son nom habituel a disparu.


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 14-01-2011 à 09:21:59    

Hum... Je n'ai peut-être pas été très clair...  
De manière plus pratique, voilà mon problème : je développe un programme serveur sur une machine de développement A, puis je transfère par une commande "scp" mon fichier programme vers une machine de test B pour l'exécuter.
 
Jusqu'à récemment, j'utilisais une CentOS 5.2. Sur cette distribution, je pouvais écraser le fichier sur la machine B, même si l'ancien programme était en cours d'exécution. Je n'avais plus qu'à relancer le programme et le tour était joué.
 
Depuis peu, je suis passé à une CentOS 5.5. Mon souci, c'est que ma commande "scp" sort en erreur lorsque j'essaie de transférer le fichier programme de A vers B si l'ancien programme est en train de tourner. Il faut donc que j'arrête le programme sur B, que je transfère le nouveau programme de A vers B, puis que je l'exécute sur B.
 
Bon, ca ne fait qu'une opération en plus, mais vous connaissez les informaticiens : on est tous des fainéants ! En fait, au delà de l'aspect pratique, j'aimerais bien comprendre quel mécanisme se cache derrière tout ca. (Où cela se situe-t-il ? Est-ce une option du noyau, ou cela se paramètre-t-il ailleurs ?)

Reply

Marsh Posté le 14-01-2011 à 19:14:21    

Je pense que POSIX te garanti que tu puisse remplacer un fichier ouvert.
 
Tu te chope quoi comme erreur?


---------------
Le salut ne viendra pas d'esprits au garde-à-vous.
Reply

Marsh Posté le 14-01-2011 à 19:39:10    

Là comme ça, en lisant CentOS, je pense à selinux :D
Mais bon, à priori ça doit pas s'appliquer à un truc fait maison sans que tu l'aies voulu...


Message édité par e_esprit le 14-01-2011 à 19:39:27

---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Marsh Posté le 17-01-2011 à 14:11:08    

@ Bigon :
La commande scp me sort le message suivant :
scp : <Nom du programme> : Text file busy
 
Plutôt curieux pour un fichier binaire...
Dans la foulée, j'ai utilisé la commande 'fuser' sur le fichier programme, pour voir qu'il est utilisé par lui-même !
 
@ e_esprit :
se_linux est désactivé sur ma configuration, donc je doute que ca puisse venir de là.
 
Je me suis demandé si le système de fichier (ext3) pouvait avoir une influence, mais je ne vois pas à quel niveau.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed