2010-10-14 19 views
0

Je veux savoir quels exécutables un script lance et dans quel ordre (et trace ces exécutables récursivement).Comment obtenir une trace de l'arbre de processus/journal d'un processus dans Linux?

Par exemple, disons que j'ai un ici script bash (appelé abc.sh):

#!/bin/bash 
ls 
gcc 

J'aimerais exécuter ce script avec une « trace/commande log » et obtenir quelque chose comme ça :

abc.sh -- ls 
     |-- gcc -- cpp 
       -- cc1 
       ... etc. 

Ceci montre que abc.sh a appelé ls, et gcc. gcc, à son tour, appelé cpp et cc1.

Est-ce possible? Comment puis-je le faire? Une vue arborescente comme ci-dessus serait bien, mais une vue plus simple fonctionnerait aussi bien.

Notez que je ne veux pas l'instantané actuel de l'arbre de processus. Au contraire, je veux une trace ou un journal des processus de ponte. Une annotation de synchronisation serait également utile.

Merci!

Répondre

0

Vous pouvez essayer d'analyser la sortie de la commande strace. En particulier, vous serez intéressé par quelque chose comme

strace -f -tt -e trace=execve ./abc.sh 
+0

Vous souhaitez probablement ajouter une redirection de sortie et un grep pour que vous ayez juste la partie exec de la sortie. En particulier si le script que vous tracez a un résultat: strace -f -e trace = execve ./t.sh 2> & 1 | grep exec –

+0

Ceci, cela fonctionnera je pense. J'espérais d'un script/outil de plus haut niveau qui ferait ce qui suit: 1. S'il y a des commandes autres que execve qui peuvent engendrer des enfants, attrapez-les aussi. 2. Présentez-le dans une belle forme d'arbre. 3. N'imprimez pas les commandes execve échouées (normalement, cela passe par votre PATH entier pour voir si l'exe est présent). –

+0

@Paul: Je préfère utiliser l'option -o pour rediriger la sortie strace vers un fichier. Car rien n'empêche le programme d'imprimer quelque chose contenant "exec" sur stderr, non? –

0

Vous pouvez utiliser la commande pstree. Il a été conçu pour montrer exactement ce que vous cherchez: arbre de processus (d'où le nom, pstree). Il ne vous donnera pas de traçage de processus, mais vous pourriez l'appeler plusieurs fois pour obtenir quelque chose de similaire à ce que vous recherchez.

+0

si le processus fraie et les sorties très rapidement? –