目前,我正在采用很长的方法来执行此操作,方法是使用以下命令获取进程列表
sudo ps -eo pid,command | grep -v grep | awk '{print $1}' > pids.txt
Run Code Online (Sandbox Code Playgroud)
然后迭代进程 id 并在后台执行每个进程的 strace,并为每个进程生成日志,并在日志扩展名中包含进程 id
filename="$1"
while read -r line
do
chmod +x straceProgram.sh
./straceProgram.sh $line &
done < "$filename"
Run Code Online (Sandbox Code Playgroud)
straceProgram.sh
pid="$1"
sudo strace -p $pid -o log.$pid
Run Code Online (Sandbox Code Playgroud)
然而,这种方法的问题是,如果有任何新进程启动,则不会对其进行 strace,因为 strace 位于第一次运行期间存储在 pids.txt 中的进程 ID 上。pids.txt 列表可以使用新的进程 ID 进行更新,但是,我对在操作系统级别运行 strace 感到好奇,该 strace 将跟踪所有正在执行的活动。有更好的方法吗?