Solaris 动态跟踪指南

END 探测器

END 探测器在所有其他探测器之后触发。在所有其他探测器子句完成之前,将不会触发此探测器。此探测器可用于处理已收集的状态,或者格式化输出。因此printa() 操作通常在 END 探测器中使用。可以同时使用 BEGINEND 探测器来度量跟踪花费的总时间:

BEGIN
{
	start = timestamp;
}

/*
 * ... other tracing actions...
 */

END
{
	printf("total time: %d secs", (timestamp - start) / 1000000000);
}

有关 END 探测器的其他常见用法,请参见数据标准化printa()

BEGIN 探测器一样,END 探测器没有定义任何参数。触发 END 探测器的上下文是任意的,不应依赖于该上下文。

跟踪时,如果 bufpolicy 选项已设置为 fill,则会保留足够的内存,以便容纳 END 探测器中跟踪的任何记录。有关详细信息,请参见fill 策略和 END 探测器


注 –

exit() 操作将导致跟踪停止并触发 END 探测器。但是,调用 exit() 操作和触发 END 探测器之间会有一定延迟。在此延迟期间,将不会触发任何探测器。在探测器调用 exit() 操作之后,在 DTrace 使用者确定已调用 exit() 并停止跟踪之前,将不会触发 END 探测器。可以使用 statusrate 选项设置检查退出状态的速率。有关更多信息,请参见第 16 章