Je voudrais déterminer quel processus a la propriété d'un fichier de verrouillage. Les fichiers de verrouillage sont simplement un fichier avec un nom spécifique qui a été créé.
Alors, comment puis-je déterminer quel processus a un fichier particulier ouvert sous Linux? De préférence, un type à une couche ou une solution particulière d’outil Linux serait optimal.
Vous pouvez également utiliser fuser
pour cela:
~> less .vimrc
# put in background
~> fuser .vimrc
.vimrc: 28135
~> ps 28135
PID TTY STAT TIME COMMAND
28135 pts/36 T 0:00 less .vimrc
Sur la plupart des systèmes Linux, lsof NAME
fait le travail:
fin@r2d2:~$ lsof /home/fin
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
bash 21310 fin cwd DIR 8,1 4096 5054467 /home/fin
lsof 21320 fin cwd DIR 8,1 4096 5054467 /home/fin
lsof 21321 fin cwd DIR 8,1 4096 5054467 /home/fin
fin@r2d2:~$
Si vous voulez savoir quel descripteur de fichier exact associe votre fichier sans lsof
ni fuser
- effectuez une recherche dans /proc
:
$ find /proc -regex '\/proc\/[0-9]+\/fd\/.*' -type l -lname "*$1*" -printf "%p -> %l\n" 2> /dev/null
Remplacez $1
par le nom de fichier ouvert que vous recherchez. Vous pouvez modifier le -printf
pour tout ce que vous voulez voir, ou diriger dans egrep -o '[0-9]+' | head -1
pour l'utiliser avec ps -Fp <pid>
pour les informations de ce processus.
La réponse $ lsof <filename>
de @fin est évidemment la meilleure solution, mais pour répondre à le commentaire de @ JoseLSegura , s’il n’est pas disponible, la solution ci-dessus est ma réponse.
J'ai trouvé que l'utilisation de la réponse acceptée ne répertoriait pas les processus utilisant mon répertoire (Ubuntu 14.04).
En fin de compte, j'ai utilisé lsof (liste des fichiers ouverts) et salué sa sortie pour trouver le processus incriminé:
lsof | egrep "<regexp-for-your-file>"