是否有可能从创建时就完全追踪脚本?如何?

是否有可能从创建时就完全追踪脚本?如何?

假设我想将 strace 挂接到一个程序以捕获它写入的文件。我需要一个现有的 PID。如果我连接 strace,到那时脚本可能已经写入了文件,而我会错过这些文件。经典的比赛条件。我现在所做的是尝试制作另一个运行原始脚本的程序,该程序除了sleep 1运行命令之前什么都不做,以便我获得完整的 strace。这感觉像是一件坏事。如果运行大量脚本,性能问题就会出现。但如果没有现有的 PID,我就无法连接 strace。或者?

答案1

将脚本替换为包装器,该包装器运行strace后会启动原始脚本。这可能涉及

mv yourscript /somewhere/else/yourscript

然后yourscript变成

#!/bin/sh
OUTPUT_TO=`mktemp /tmp/yourscript.$$.XXXXXXXXXX` || exit 1
exec strace -o $OUTPUT_TO ... /somewhere/else/yourscript "$@"

你需要的...其他参数在哪里。strace

作为替代方案,请考虑sysdig,因为它可以通过文件名或用户名进行跟踪,而不需要进程 ID 或包装器脚本:

sysdig -p '%fd.name' proc.name contains yourscript

相关内容