Récemment sur un système OpenBSD, j'ai voulu suivre les appel système que faisait un process :
# strace isakmpd -vd
ksh: strace: not found
# pkg_add strace
Can't find strace
OMG, comment faire ?!
En fait, strace
est spécifique à Linux, et un équivalent existe sur les
systèmes BSD. Il s'agit du couple ktrace
/kdump
. En gros, ktrace
permet de
contrôler l'enregistrement ou non des appels que fait un process, et kdump
permet de lire le fichier binaire que son cousin a généré (nommé ktrace.out
par défaut).
Petit exemple d'utilisation :
ktrace <PID>
Équivalent de l'option -f
de strace
(pour tracer également les processus
fils) :
ktrace -id <PID d'une processe qui fait plein de petits>
Équivalent de l'option -p
de strace
(pour tracer un process existant, sans
devoir le relancer). Bon là ça ne change pas trop :
ktrace -p <PID d'un process applicatif super critique, lancé depuis une éternité, que plus personne ne sait comment le relancer et que si il crash c'est la fin du monde>
Quand vous avez récupéré suffisamment de traces à lire (ou quand vous vous apercevez que votre ktrace.out a pris 100 % de l'espace libre restant sur la partition), pour arrêter l'enregistrement :
ktrace -C
Maintenant que vous avez votre bon gros fichier binaire avec plein de traces dedans :
kdump |less
Si l'enregistrement des traces est toujours en cours, vous pouvez avoir l'équivalent d'un tail -f
:
kdump -l
Pour plus de détail, voir bien sûr les man de ktrace (1)
et kdump (1)
.