ftruncate action truncates standard output file, but does not truncate standard error file. To truncate standard error file, you have to re-open stdout as stderr, truncate, then re-open the original stdout. Following is an example:
# cat > script.d <<EOF #!/usr/sbin/dtrace -s #pragma D option quiet #pragma D option destructive BEGIN { printf("data\n"); freopen("/dev/stderr"); ftruncate(); freopen(""); /* re-open original stdout */ printf("more data\n"); exit(0); } EOF # chmod a+x script.d # echo foo > stdout # echo foofoo > stderr # ls -l std* -rw-r--r-- 1 root root 7 Feb 27 14:21 stderr -rw-r--r-- 1 root root 4 Feb 27 14:21 stdout # ./script.d >> stdout 2 >> stderr # ls -l std* -rw-r--r-- 1 root root 0 Feb 27 14:26 stderr -rw-r--r-- 1 root root 19 Feb 27 14:26 stdout # cat stdout foo data more data #