【发布时间】:2014-05-31 12:29:01
【问题描述】:
目前,我正在通过使用以下命令获取进程列表来执行此操作
sudo ps -eo pid,command | grep -v grep | awk '{print $1}' > pids.txt
然后遍历进程ID并在后台执行每个进程的strace并为每个进程生成日志,进程ID在日志的扩展中
filename="$1"
while read -r line
do
chmod +x straceProgram.sh
./straceProgram.sh $line &
done < "$filename"
straceProgram.sh
pid="$1"
sudo strace -p $pid -o log.$pid
但是,这种方法的问题在于,如果有任何新进程启动,它将不会被跟踪,因为 strace 在第一次运行期间存储在 pids.txt 中的进程 ID 上。 pids.txt 列表可以使用新的进程 ID 进行更新,但是,我对在操作系统级别运行 strace 感到好奇,这将 strace 正在执行的所有活动。 有没有更好的方法来做到这一点?
【问题讨论】:
-
您希望通过
straceing 系统上的每个进程来完成什么?这似乎是一个非常糟糕的主意,如果仅仅是因为系统的性能绝对会下降,并且您正在生成大量可能没人会查看的跟踪数据。您可能有一个更好的解决方案... -
我了解,但是,我需要这些日志以便更好地了解系统调用的每个阶段处理的文件。在更高的层面上,这是设计一种 RAID 类型的系统,用于存储源文件和生成文件之间的中间文件,以便更快地恢复。
标签: linux process operating-system strace