La commande fuser sous Solaris est très pratique pour retrouver si il existe des process qui accèdent à un répertoire ou à un fichier.
Exemple dans cet article : l'étude des process qui accèdent au fichier sybase_exploit.log qui a explosé le quota d'une zone ZFS Solaris
sybase@BOHRIUM> fuser -fu sybase_exploit.log
sybase_exploit.log: 21363o(sybase) 21362o(sybase) 17003o(sybase)
14722o(sybase) 14721o(sybase) 14720o(sybase) 14719o(sybase)
14428o(sybase) 14378o(sybase) 14332o(sybase) 14311o(sybase)
...
Pour obtenir uniquement la liste des ID des process (PID) sans aucun formatage de la commande fuser, renvoyer la sortie STDERR vers /dev/null :
sybase@BOHRIUM > fuser sybase_exploit.log 2> /dev/null
24061 24060 17003 14722 14721 14720 14719 14718 14717 14716 14662 14625 14624 14623 14622 14586 14581
Lorsque la liste des process est négligeable, le programme correspondant à un process ID (PID) peut être retrouvé manuellement avec la commande ps qui liste les process :
sybase@BOHRIUM> ps -ef | grep 14428
sybase 14428 1 0 14:51:01 pts/1 0:00 /Software/sybase/sybase-15.0.3-64b/ASE-15_0/bin/backupserver -SDTH_U1_BCK -e/So
En revanche l'opération manuelle devient très fastidieuse lorsque le nombre de process est élevé dans le résultat de la commande fuser.
Avant de se lancer dans le développement d'un script shell, 2 astuces très pratiques et à retenir sont proposées dans cet article :
Une simple ligne de commande combinant les commandes ps et fuser affiche instantanément les programmes qui accèdent à un fichier (sybase_exploit.log dans l'exemple ci-dessous) :
ps -o pid,args -p "$(fuser sybase_exploit.log 2>/dev/null)"
PID COMMAND 14247 /Software/sybase/sybase-15.0.3-64b/ASE-15_0/bin/dataserver -sDAS_U1_ASE -d/DAS/ 14279 /Software/sybase/sybase-15.0.3-64b/ASE-15_0/bin/dataserver -sDTH_U1_ASE -d/DTH/ 14311 /Software/sybase/sybase-15.0.3-64b/ASE-15_0/bin/dataserver -sMIP_U1_ASE -d/MIP/ 14332 /Software/sybase/sybase-15.0.3-64b/ASE-15_0/bin/dataserver -sSMA_U1_ASE -d/sma/ 17003 /bin/ksh dba/bin/update_statistics.ksh -D SMA_U1_ASE -Mindex 24060 isql -Usa -D smartco -SSMA_U1_ASE -i/Software/sybase/dba/scratch/upstat.SMA_U1_ 24061 grep -v ^Password:
L'option -p de la commande ps accepte en paramètre une liste de process PID. Cette liste de process est le résultat de la commande fuser en supprimant la sortie STDERR vers /dev/null.
Voici un exemple avec 2 process qui accèdent au fichier spa.log :
ps -o pid,args -p "$(fuser spa.log 2>/dev/null)"
PID COMMAND 25507 isql -Usa -ospa.log 25554 isql -Usa -ospa.log
À utiliser avec précaution et en connaissance de cause, la commande fuser avec l'option -k tue en une seule ligne de commande les process accédant au fichier spa.log sans devoir lancer unitairement la commande kill :
fuser -k -u spa.log spa.log: 25554o(sybase) 25507o(sybase) |
SMA_U1_ASE > isql -Usa -ospa.log Password: Killed |
| Version | Date | Commentaires |
|---|---|---|
| 1.0 | 07/2011 | Version initiale |