Manuel de suivi dynamique Solaris

Suppression de l'interférence de dtrace(1M)

Si vous suivez chaque appel vers l'appel système write(2), vous allez créer une cascade de sortie. Suite à chaque appel de la fonction write(), la commande dtrace(1M) appelle la fonction write() lorsqu'elle affiche la sortie. Cette boucle d'évaluation est un bon exemple de la manière dont la commande dtrace peut interférer avec les données souhaitées. Vous pouvez utiliser un simple prédicat pour empêcher le suivi des données non désirées :

syscall::write:entry
/pid != $pid/
{
	printf("%s", stringof(copyin(arg1, arg2)));
}

La variable de macro $pid développe l'identifiant de processus du processus qui a activé les sondes. La variable pid contient l'identifiant de processus du processus dont le thread est exécuté sur la CPU sur laquelle la sonde a été déclenchée. Par conséquent, le prédicat /pid != $pid/ garantit que le script n'assure le suivi d'aucun événement lié à l'exécution de ce script.