Univers Libre

Tracer un processus sur un système BSD

Written on 9 May 2013, 21:01 CEST
Tags: bsd, sysadmin.

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