【问题标题】:strace entire operating system to get strace logs of all processes simultaneouslystrace 整个操作系统,同时获取所有进程的 strace 日志
【发布时间】: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


【解决方案1】:

使用 strace -f (fork) 选项,我也建议使用 -s 9999 了解更多详情

【讨论】:

    【解决方案2】:

    如果您生成的文件系统将成为内核文件系统驱动程序,我建议使用tracefs 来收集您需要的信息。除非您有大量时间和大量测试资源,否则我建议不要将此作为内核文件系统。这不是微不足道的。

    如果您想要一个更简单、更安全的替代方案,请使用fuse 编写您的文件系统。缺点是性能不太好,有一些地方不能使用,但通常可以接受。请注意,在 fuse 下已经有一个日志文件系统的实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-18
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2016-06-09
      相关资源
      最近更新 更多