dtrace 打印父进程命令
Dtrace print parent process command
我想要一个脚本,可以为每个新的 运行 进程打印其启动命令及其父进程。
我正在使用以下探针:
proc::posix_spawn:exec-success,proc::__mac_execve:exec-success
在脚本主体中,命令行字符串是从 curproc->p_dtrace_argv
构建的。
parent pid (ppid) 也可用,但到目前为止我还没有弄清楚如何提取父进程名称(最好是可以从父 argv[0] 中获取的全名)。
您可以在 proc:::exec
探测器中调用 exec()
之前捕获进程的 execname。这将是调用 fork()
的可执行文件的名称,并将匹配父进程的 execname
。
我在 Solaris 11 安装上对此进行了测试:
#!/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;
}
它产生了以下输出:
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
根据评论更新:
#!/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;
}
我想要一个脚本,可以为每个新的 运行 进程打印其启动命令及其父进程。
我正在使用以下探针:
proc::posix_spawn:exec-success,proc::__mac_execve:exec-success
在脚本主体中,命令行字符串是从 curproc->p_dtrace_argv
构建的。
parent pid (ppid) 也可用,但到目前为止我还没有弄清楚如何提取父进程名称(最好是可以从父 argv[0] 中获取的全名)。
您可以在 proc:::exec
探测器中调用 exec()
之前捕获进程的 execname。这将是调用 fork()
的可执行文件的名称,并将匹配父进程的 execname
。
我在 Solaris 11 安装上对此进行了测试:
#!/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;
}
它产生了以下输出:
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
根据评论更新:
#!/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;
}