Qu’est-ce qui génère le message “fichier texte occupé” dans Unix?

Quelle opération génère l’erreur “fichier texte occupé”? Je suis incapable de dire exactement.

Je pense que cela est lié au fait que je crée un script python temporaire (en utilisant tempfile) et en utilise execl, mais je pense que execl change le fichier en cours d’exécution.

Cette erreur signifie qu’un autre processus ou utilisateur accède à votre fichier. Utilisez lsof pour vérifier quels autres processus l’utilisent. Vous pouvez utiliser la commande kill pour le tuer si nécessaire.

Cela fait un certain temps que je n’ai pas vu ce message, mais il y avait plusieurs décennies, il était répandu dans System V R3 ou à peu près. À l’époque, cela signifiait que vous ne pouviez pas modifier un programme exécutable pendant qu’il était en cours d’exécution.

Par exemple, je construisais un outil de travail appelé rmk , et après un certain temps, il était auto-entretenu. Je voudrais exécuter la version de développement et le faire construire une nouvelle version. Pour le faire fonctionner, il était nécessaire d’utiliser la solution de contournement:

 gcc -g -Wall -o rmk1 main.o -L. -lrmk -L/Users/jleffler/lib/64 -ljl if [ -f rmk ] ; then mv rmk rmk2 ; else true; fi ; mv rmk1 rmk 

Donc, pour éviter les problèmes avec le «fichier texte occupé», la construction a créé un nouveau fichier rmk1 , puis déplacé l’ancien rmk vers rmk2 (le renommage n’était pas un problème;

Je n’ai pas vu l’erreur sur un système moderne depuis longtemps… mais je n’ai pas tous souvent des programmes qui se reconstruisent.

Cela se produit lorsque vous essayez d’écrire dans un fichier en cours d’exécution par le kernel ou d’exécuter un fichier actuellement ouvert à l’écriture.

Source: http://wiki.wlug.org.nz/ETXTBSY

Je ne connais pas la cause mais je peux consortingbuer à un travail rapide et facile.

Je viens de faire l’expérience de cette singularité sur CentOS 6 après “cat> shScript.sh” (coller, ^ Z) puis éditer le fichier dans KWrite. Curieusement, il n’y avait pas d’instance discernable (ps -ef) du script en cours d’exécution.

Mon travail rapide a consisté simplement à “cp shScript.sh shScript2.sh”, puis j’ai pu exécuter shScript2.sh. Puis j’ai supprimé les deux. Terminé!

Vous trouverez peut-être cela plus courant sur les partages réseau CIFS / SMB. Windows ne permet pas d’écrire un fichier lorsque ce fichier est ouvert, et même si le service n’est pas Windows (il peut s’agir d’un autre produit NAS), il reproduira probablement le même comportement. Potentiellement, il pourrait également s’agir d’une manifestation de problèmes NAS sous-jacents vaguement liés au locking / réplication.

Dans mon cas, j’essayais d’exécuter un fichier shell (avec une extension .sh) dans un environnement csh, et je recevais ce message d’erreur.

juste courir avec bash a fonctionné pour moi. Par exemple

bash file.sh

Une de mes expériences:

Je modifie toujours le raccourci clavier par défaut de Chrome via le reverse engineering. Après modification, j’ai oublié de fermer Chrome et j’ai exécuté ce qui suit:

 sudo cp chrome /opt/google/chrome/chrome cp: cannot create regular file '/opt/google/chrome/chrome': Text file busy 

En utilisant strace, vous pouvez trouver plus de détails:

 sudo strace cp ./chrome /opt/google/chrome/chrome 2>&1 |grep 'Text file busy' open("/opt/google/chrome/chrome", O_WRONLY|O_TRUNC) = -1 ETXTBSY (Text file busy) 

Si vous essayez de construire phpredis sur une phpredis Linux, vous devrez peut-être prendre le temps de modifier les permissions de fichiers, avec une commande de sleep , avant d’exécuter le fichier:

 chmod a+x /usr/bin/php/scripts/phpize \ && sleep 1 \ && /usr/bin/php/scripts/phpize 

Je suis tombé sur ceci en PHP en utilisant fopen() sur un fichier et en essayant ensuite de le unlink() avant d’utiliser fclose() dessus.

Pas bien:

 $handle = fopen('file.txt'); // do something unlink('file.txt'); 

Bien:

 $handle = fopen('file.txt'); // do something fclose($handle); unlink('file.txt');