~/.bashrc, ~/.zshrc などに記述
capture() {
sudo dtrace -p "$1" -qn '
syscall::write*:entry
/pid == $target && arg0 == 1/ {
printf("%s", copyinstr(arg1, arg2));
}
'
}
capture-all() {
sudo dtrace -p "$1" -qn '
syscall::write*:entry
/pid == $target && (arg0 == 1 || arg0 == 2)/ {
printf("%s", copyinstr(arg1, arg2));
}
'
}
使用例
example@localhost:~$ php -r 'while (true) { echo "Hello\n"; sleep(1); }' >/dev/null &
[1] 97755
example@localhost:~$ capture 97755
Hello
Hello
Hello
Hello
...
追記
El Capitan 以降の場合はリカバリモードで csrutil enable --without dtrace
の設定が必要です。