如何跟踪连续运行的进程?

如何跟踪连续运行的进程?

所以我想知道文件是如何按zsh.xinitrc.xprofile.zprofile以及确切的顺序打开的。因此,我决定使用该命令进行处理,strace以查看如何调用系统调用,最终我可以决定和订购如何加载这些文件。zshgrepopen

我的命令:

strace zsh | grep open

但是当我运行这个程序时,它一直向我显示输出zsh并且grep不起作用。当我结束该过程时ctrl+d也没有任何反应。

那么有什么方法可以grep在这种过程中获得这样的输出吗?

答案1

strace默认情况下将其输出发送到 stderr。

在这里,你可以这样做:

strace -o >(grep --color open >&2) zsh

运行时查看名称、参数或返回值中任意位置zsh的所有系统调用,或者:open

strace -e /open zsh

( 的缩写strace -e trace=/open zsh)或:

查看open名称中包含的系统调用(例如 open、openat、pidfd_open、mq_open、open_by_handle_at、perf_event_open 列表可能不准确,具体取决于您所在的系统及其版本)。

或者:

strace -e open,openat zsh

仅适用于这两个系统调用。

该输出与 shell 的提示符和命令输出一起发送到终端。您可能更愿意将其发送到稍后可以检查的文件或位于单独的终端或screen/tmux窗格中:

strace -o >(grep --color open > strace.log) zsh
strace -e /open -o strace.log zsh

要还跟踪在子进程中进行的调用(包括在子进程及其子进程中执行的命令),您需要该-f选项。

因此,请查看什么打开了您的系统~/.xinitrc(与 无关zsh)以及何时可以使用该audit系统(默认情况下您的系统上可能未安装/启用)。

相关内容