这意味着dtrace脚本
dtruss
正在内部使用访问无效的内存地址,这是在尝试跟踪
execve
打电话给你,你很好奇。所以基本上,
桁架
(或者可能是dtrace本身)似乎有一个阻止您获取所需信息的错误。不幸的是,苹果在保持DTrace和依赖于它的工具在MacOS上运行良好方面并不是最好的。
特别是对于bash/shell脚本,可以通过添加
set -x
在脚本顶部(更多信息
in this other answer
)
如果您愿意,您也可以尝试直接使用dtrace——这是一个非常简单的一行程序(还没有尝试自己运行这个程序,所以如果有错,请道歉):
sudo dtrace -n 'proc:::exec-success /ppid == $target/ { trace(curpsinfo->pr_psargs); }' -c './script.sh'
工作方式是:
-
proc:::exec-success
追踪所有
exec-success
系统中的事件,触发
在子流程中
当一个
exec*
-家庭系统调用成功返回。
-
/ppid == $target/
:筛选器,这意味着只有当父进程的PID(
ppid
)与为进程启动返回的PID匹配
-c
我们传递给
dtrace
命令(
$target
)
-
{ trace(curpsinfo->pr_psargs); }
:这是事件触发并与筛选器匹配时要采取的操作。我们只是打印(
trace
)传递给进程的参数,该参数存储在
curpsinfo
变量。
(如果失败,并出现类似的错误,则很可能是MacOS的
姜黄素
某处)