次の例に示すDプログラムcountsyscalls.d
は、プロセスIDで指定されたプロセスが別のシステム・コールを起動した回数をカウントします。
#!/usr/sbin/dtrace -qs /* countsyscalls.d -- Count system calls invoked by a process */ syscall:::entry /pid == $1/ { @num[probefunc] = count(); }
syscalls.d
ファイルを実行可能ファイルにした後、コマンドラインから実行し、プロセスIDを引数として指定します。
次の例は、以前に呼び出されたemacs プログラムの使用をモニターする方法を示しています。 スクリプトが起動された後、emacs 内で、Dスクリプトを終了する前に、2つのファイルが開かれて変更され、保存されます。
スクリプトを実行可能にします:
# chmod +x countsyscalls.d
別のコマンドラインから、次のように入力します:
# emacs foobar.txt
ここでスクリプトを開始し、開いたemacsウィンドウを使用します:
#./countsyscalls.d $(pgrep -u root emacs)
^C
chmod 1 exit_group 1 futex 1 getpgrp 1 lseek 1 lsetxattr 1 rename 1 fsync 2 lgetxattr 2 alarm 3 rt_sigaction 3 unlink 3 mmap 4 munmap 4 symlink 4 fcntl 6 newfstat 6 getgid 7 getuid 7 geteuid 8 openat 8 access 9 getegid 14 open 14 getdents 15 close 17 readlink 19 newlstat 33 newstat 155 read 216 timer_settime 231 write 314 pselect6 376 rt_sigreturn 393 ioctl 995 rt_sigprocmask 1261 clock_gettime 3495
前述の例では、pgrep コマンドを使用して、root
ユーザーが実行しているemacs プログラムのプロセスIDを判別します。