Existe-t-il un équivalent de ce que fait l' option -T
et -U
de l' truss
utilitaire Solaris sur Linux.
Il s'agit de spécifier un appel système ( -T
) ou une fonction de bibliothèque ( -U
) qui, une fois appelée par l'application tracée, entraînerait son arrêt.
Ou, dit le contraire, je voudrais que tout processus démarré par une application tracée soit arrêté (comme s'il était tué par SIGSTOP) dès qu'il effectue un appel système donné ou un appel de fonction de bibliothèque partagée donné.
strace
et ltrace
sous Linux fournissent une grande partie des fonctionnalités de Solaris truss
, mais ils ne semblent pas le faire.
Par exemple:
truss -f -T open cmd
Serait comme strace -f cmd
sauf que si le processus en cours d'exécution cmd
ou l'un de ses descendants fait un open
appel système, il serait arrêté immédiatement (et je peux le reprendre plus tard à ma convenance)
Dans certains cas, je pouvais utiliser gdb
des s catch syscall
, mais je cherchais une solution qui puisse facilement suivre les fourches et continuer à le faire pour tous les processus fourchus et continuer à le faire même après execve
s.
Je semble me rappeler un utilitaire donnant la même fonctionnalité, même une (ou des options à ce même utilitaire) pour des applications en une seule étape entre certaines occurrences de certains appels système à distance comme ça, mais ma mémoire me fait défaut, je ne peux même pas être sûr c'était sous Linux.
follow-exec-mode
), j'expérimente avec ça. Ne répond pas strictement à la question, mais peut être suffisant pour ce dont j'ai besoin.truss
page de manuel Solaris .Réponses:
À ma connaissance, cela ne peut pas être fait
strace
, laptrace
fonction utilisée en interne le faitSIGSTOP
ouSIGINT
lors d'appels.ÉDITER:
J'ai inséré cette solution simple dans ministrace , donc aucun codage n'est requis.
Ma solution proposée, si toutes les fonctionnalités de strace ne sont pas nécessaires, serait de modifier le ministrace - que j'ai trouvé ici Écrivez-vous une strace en 70 lignes de code .
Dans un programme à un coup, vous pouvez ajouter deux lignes avant le code suivant:
Pseudo code:
Je n'ai rien testé de tout cela, ces étapes finales vous sont laissées.
la source
Systemtap devrait être capable de faire ce que vous cherchez, c'est un bon guide pour cela:
https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/SystemTap_Beginners_Guide/
la source