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