Je recherche une fonction de ligne de commande ou une fonction c qui me fera savoir si un fichier est ouvert / utilisé par quelque chose.
lsof
et fuser
dites-le, mais ils fournissent beaucoup d'autres informations qui entraînent jusqu'à 300 ms dans certaines situations (comme lorsque j'utilise ce code sur MAC OS X, je devve pour Linux et OS X) (j'ai une fenêtre solution qui prend 5 ms, donc j'essaie de trouver quelque chose dans Unix qui est également très rapide, et renvoie juste vrai ou faux si le fichier est en cours d'utilisation)
command-line
files
Noitidart
la source
la source
Réponses:
Si vous utilisez cela comme un verrou, il ne fonctionnera pas non plus
lsof
oufuser
éviter que les conditions de course.Le processus de base qui le
lsof
fait est de parcourir tous les processus à la/proc/*/fs
recherche de descripteurs de fichiers ouverts. Cela va prendre du temps, quoi que vous fassiez.Vous pouvez le faire vous-même, mais il est peu probable que ce soit plus rapide car vous devez vérifier chaque processus ouvert sur le système.
Si ce que vous faites est critique en termes de temps, trouvez une autre façon de le faire.
/proc/<PID>/fs
pour voir si votre fichier est actuellement ouvert ou non. En regardant un seul processus, les descripteurs de fichiers ouverts seront beaucoup plus rapides que le mappage entre tous.Vous avez donné plus d'informations dans un commentaire que vous souhaitez déterminer si Firefox fonctionne sur un système donné. La meilleure façon de procéder consiste à rechercher les fichiers de verrouillage de Firefox. Ceux-ci sont stockés dans des emplacements par défaut spécifiés sur le wiki Mozilla.
Par exemple, sur Linux, demandez à votre programme de faire ce qui suit:
~/.mozilla/firefox/
répertoire..default
. (Je pense que tous les profils se terminent par.default
, si ce n'est pas simplement explorer tous les répertoires.)lock
ou.parentlock
. Si vous voyez un ou les deux fichiers, Firefox est ouvert.Cet algorithme devrait s'exécuter plus rapidement que ce que vous faites actuellement sur Windows.
la source
ps aux firefox
. Prenez ces PID et recherchez-les dans le/proc/
système de fichiers.ps aux firefox
. Eh bien ma situation exacte est: j'ai le chemin vers un fichier. Il est verrouillé si firefox est en cours d'exécution. Je veux voir si c'est verrouillé ou non pour dire si Firefox fonctionne.TL; DR
Dans l' un de vos commentaires , vous déclarez:
Votre question initiale sur les fichiers de verrouillage semble être le chemin à parcourir lorsqu'il existe des moyens plus faciles de savoir si Firefox fonctionne pour un utilisateur donné et d'inspecter son état de processus.
Examen de l'état du processus
Une façon plus judicieuse de trouver le PID d'un processus donné consiste à utiliser pgrep à partir du package procps . Par exemple:
Vous pouvez ensuite inspecter l'état du PID avec ps :
ou obtenez simplement les drapeaux de l'État sans autre cruauté:
Un mon système, le one-liner ci-dessus ne prend systématiquement que 1,4 millisecondes pour terminer. Votre kilométrage peut varier.
Codes d'état de processus
La section PROCESS STATE CODES de ps (1) détaille la signification des différents drapeaux d'état. Sur Ubuntu 14.04, la page de manuel indique:
la source
~/.mozilla/firefox/*/lock
. Vous pouvez ensuite identifier la session en consultant le nom du répertoire parent de chaque fichier de verrouillage. Sur d'autres plateformes, cela ne fonctionne pas. Notre discussion explique plus en détail comment le faire fonctionner sur Mac (ce qui n'est pas pertinent pour Ubuntu, mais vous l'avez). Pour être juste, il devrait vraiment mettre à jour la question pour être plus précis. : P