确定一个程序用来启动另一个程序的命令行参数?

Determine command line arguments a program uses to launch another one?

动机:当我运行grub-mkrescue时,它在内部启动xorriso写一个iso文件。我想查看正在传递的命令行参数 xorriso。我知道我可以查看 grub-mkrescue 的来源,但我现在对通用解决方案很感兴趣。我尝试使用 strace 但输出没有说明。

strace grub-mkrescue -o foo.iso iso/

有办法吗?

您可以将 xorriso 替换为更详细的 xorriso:

which xorisso
cd $(dirname $(which ps))
mv xorisso xorisso.org
test -f xorisso | echo "mv failed, stop here" 

cat <<'@' > xorisso
echo "[=10=] $@" > /tmp/xorisso_call.tmp
"[=10=].org" "$@"
@
chmod +x xorisso

一个进程会在 运行 execve 之前 fork,所以它不会出现在 parent 的 strace 中。

使用 strace -f 也可以关注 children。