I wanted to quickly debug some program without actually dumping to disk by using FIFOs, however ktrace(2) wouldn't accept anything but regular files.
Are there any pitfalls or limitations I am currently not aware of that justify this strict behaviour? $ ln -s some.file link $ ktrace -a -f link echo foo ktrace: link: Too many levels of symbolic links $ mkfifo fifo && cat fifo >/dev/null & $ ktrace -a -f fifo echo foo ktrace: fifo: Permission denied With this tiny patch ktrace(2) allows appending to FIFOs, which enables me to do the following: $ mkfifo ktrace.out && kdump -l & $ ktrace -a echo foo foo 1903 ktrace RET ktrace 0 1903 ktrace CALL execve(0x7f7ffffe6d50,0x7f7ffffe72e8,0x7f7ffffe7300) [...] $ ktrace -a echo bar bar 94065 ktrace RET ktrace 0 94065 ktrace CALL execve(0x7f7ffffe2280,0x7f7ffffe2818,0x7f7ffffe2830) [...] Feedback? OK? Index: kern_ktrace.c =================================================================== RCS file: /cvs/src/sys/kern/kern_ktrace.c,v retrieving revision 1.91 diff -u -p -r1.91 kern_ktrace.c --- kern_ktrace.c 14 Feb 2017 10:31:15 -0000 1.91 +++ kern_ktrace.c 20 Jun 2017 22:01:56 -0000 @@ -428,7 +428,7 @@ sys_ktrace(struct proc *p, void *v, regi vp = nd.ni_vp; VOP_UNLOCK(vp, p); - if (vp->v_type != VREG) { + if (vp->v_type != VREG && vp->v_type != VFIFO) { error = EACCES; goto done; }