Dtrace print parent process command
我想要一个脚本,该脚本为每个新运行的进程打印其启动命令及其父进程。
我正在使用以下探针:
1 | proc::posix_spawn:exec-success,proc::__mac_execve:exec-success |
在脚本主体中,命令行字符串是从
parent pid(ppid)也可用,但是到目前为止,我还没有弄清楚如何提取父进程名称(最好是可以从父argv [0]中获取的全名)。
您可以在
我在Solaris 11安装上对此进行了测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/sbin/dtrace -s proc:::exec { self->pexecname = execname; } proc:::exec-success / self->pexecname != 0 / { printf("execname: %s, parent execname: %s", execname, self->pexecname ); self->pexecname = 0; } |
它产生了以下输出:
1 2 3 4 5 | dtrace: script './exec.d' matched 2 probes CPU ID FUNCTION:NAME 6 12486 exec_common:exec-success execname: utmp_update, parent execname: gnome-pty-helper 14 12486 exec_common:exec-success execname: bash, parent execname: gnome-terminal 15 12486 exec_common:exec-success execname: ls, parent execname: bash |
每个评论已更新:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #!/usr/sbin/dtrace -s proc:::exec { self->pexecname = execname; self->parent_args = (build parent args off curproc here) } proc:::exec-success / self->pexecname != 0 / { printf("execname: %s, parent execname: %s", execname, self->pexecname ); self->pexecname = 0; self->parent_args = 0; } proc:::exec-failure / self->pexecname != 0 / { self->pexecname = 0; self->parent_args = 0; } |