我不应该跟踪哪些进程?

我不应该跟踪哪些进程?

我创建了一个小函数,用于strace按名称“ing 一组当前用户的进程”:

function pstrace() {
    local pattern="$1";
    shift;
    prefixDashP $(pgrep -U $(whoami) $pattern) | xargs strace -o /dev/stdout $@;
}

function prefixDashP() {
    local new_args=();
    for arg; do
        new_args+=( '-p' );
        new_args+=( "$arg" );
    done;
    for arg in "${new_args[@]}"; do
        echo "$arg";
    done;
}

# Usage:  pstrace pattern1 pattern2 ...

问题是,如果我不小心指定了太宽泛的模式,它会尝试监视它不应该监视的进程,因此我的系统会冻结。

是否存在一个我可以始终排除的进程列表?

答案1

您不得跟踪任何涉及处理 的输出的进程strace。这至少意味着您运行 strace 的终端模拟器。我不认为你的整个系统会被冻结,只会变慢;除非您以 root 身份运行strace并跟踪您的 X 服务器,否则您应该能够切换到不同的终端并终止 strace 进程。

将 strace 输出发送到文件会风险更小,而且可能更方便。less在启动之后启动strace,如果您不小心跟踪了终端模拟器,则将其终止。

如果您想跟踪很多流程,则可能使用了错误的工具。系统范围的审计系统,例如 Linux 的(参见示例和指针这里或者这里),可能更合适。

相关内容