Surveiller en continu les fichiers ouverts / accessibles par un processus

25

lsof -p 12345 listera tous les fichiers ouverts par un processus dont le pid est 12345 mais seulement pour un instant particulier.

Comment pouvons-nous surveiller en permanence un processus du début à la fin (jusqu'à la fin du processus) pour répertorier / afficher chaque fichier auquel le processus accède pendant toute sa durée de vie?

MA1
la source

Réponses:

31

Essayez avec strace -p 12345; il devrait faire ce que vous essayez de réaliser.

La sortie peut être filtrée pour afficher uniquement les fichiers ouverts ( commentaire de Dan D. ):

strace -e open -p 12345

Remarque: vous pouvez également suivre rapidement les processus en cours d'exécution avec strace -e open <command>.

Jens Erat
la source
la sortie n'est pas conviviale et trop de choses supplémentaires.
MA1
Vous pouvez résoudre ce problème en canalisant - strace -p {pid} | grep -i "Open" | tee files_opened.log. La clé est grep, qui vous permet de filtrer la sortie pour l'appel système que vous souhaitez (par exemple open()).
11
@Ninefingers En fait, stracepeut faire mieux grepqu'avec l' -eoption:strace -e open
Dan D.
@DanD oh ouais, ofc :)
Lorsque je tue la commande strace, elle tue également la chose qu'elle trace. Pourquoi cela se produit-il (cygwin)?
CMCDragonkai
6

Le nouvel utilitaire fatrace fera cela: https://launchpad.net/fatrace/

sudo fatrace | grep '(6514)'

N'utilisez pas l'option -p, cela signifie l'opposé de ce que cela signifie dans lsof ou d'autres utilitaires.

Bryce
la source
3

Cela exécutera en boucle la réexécution de votre commande et l'effacement de l'écran à chaque fois:

watch "lsof -p 12345"

AVERTISSEMENT: cela manquera les accès rapides aux fichiers et ne convient que pour voir les fichiers de longue date

jcalfee314
la source
2
C'est un peu maladroit par rapport à l'autre réponse en utilisant strace.
David Foerster
1
C'est une solution inexacte - un processus peut utiliser des fichiers entre les exécutions delsof
Dor
@Dor vous pouvez régler le timing de lsof sur moins de 1 seconde et augmenter sa précision. Bien qu'il soit maladroit par rapport aux autres, vous avez tort en ce qu'il s'agit d'une solution inexacte.
Jordon Bedwell
Si vous regardez une longue opération de fichier (comme une sauvegarde de base de données), cela peut être une bonne alternative simple.
jcalfee314