GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je déterminer quel processus a un fichier ouvert sous Linux ?

Sur la plupart des systèmes Linux lsof NAME fait le travail :

[email protected]:~$ 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
[email protected]:~$

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

Avoir un fichier ouvert n'est pas un verrou car, si chaque processus doit d'abord vérifier si le fichier est ouvert et ne pas continuer s'il l'est ou le créer/l'ouvrir s'il ne l'est pas, alors deux processus pourraient très bien vérifier simultanément, les deux trouvent qu'il n'est pas ouvert, créez-le ou ouvrez-le.

Pour utiliser un fichier comme verrou, l'opération de vérification et de verrouillage doit être une seule opération ininterrompue. Vous pouvez y parvenir dans un système de fichiers Unix en créant un fichier en mode lecture seule et en le supprimant pour le déverrouiller. Si le fichier existe (et est en lecture seule), la création du fichier échouera, vous obtiendrez donc un contrôle et un verrouillage en une seule opération atomique.

Si votre processus de verrouillage est un script shell qui s'exécutera en tant que démon, vous pouvez obtenir cet effet en utilisant umask , un paramètre par processus qui définit les autorisations avec lesquelles les nouveaux fichiers sont créés :

oldumask=$(umask)
umask 222   # create files unwritable to owner too
if echo $$ > /var/lock/foo
then
    : locking succeeded
else
    : locking failed
fi
umask $oldumask
Cela écrit également le PID du processus propriétaire dans le fichier, ce qui résout votre autre problème :cat /var/lock/foo En ce qui concerne la question spécifique "Quels processus ont ce fichier ouvert?", Cela peut être utile lorsque vous souhaitez démonter un système de fichiers mais que vous ne le pouvez pas car certains processus ont un fichier ouvert. Si vous ne disposez pas de ces commandes, vous pouvez demander /proc en tant que root :

ls -l /proc/*/cwd | grep '/var/lock/foo$'

ou, en tant qu'utilisateur mortel :

ls -l /proc/*/cwd 2>/dev/null | grep '/var/lock/foo$'


Linux
  1. Qu'est-ce que NFS et comment l'installer sous Linux

  2. Comment créer, extraire ou ouvrir un fichier RAR sous Linux ?

  3. Comment déterminer quel processus écrit sur le disque sous Linux

  4. Comment puis-je créer un fichier tar en plusieurs parties sous Linux ?

  5. Comment déterminez-vous le type de socket CPU d'un ordinateur Linux?

Comment ouvrir un fichier sous Linux

Comment déterminer le type MIME d'un fichier sous Linux

Comment changer la limite de fichiers ouverts sous Linux

Qu'est-ce que les liens symboliques sous Linux ? Comment créer des liens symboliques ?

Comment utiliser la commande lsof sous Linux

Comment savoir quel processus a un port spécifique ouvert sous Linux ?