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).