当我想跟踪一个守护进程SSHD时,为什么ptrace会产生一个僵尸进程

时间:2015-01-25 13:53:12

标签: c ptrace

我正在尝试ptrace一个sshd守护进程。以下简单程序附加到守护程序。每当关闭ssh客户端连接时,新生成的sshd进程将变为僵尸进程。你能给我任何评论吗?提前谢谢。

int main(int argc, char *argv[])

{
        pid_t traced_process;

        int status = 0;

        if(argc != 2){
            printf("Usage: %s <pid to be traced>\n", argv[0]);
            exit(1);
        }

        traced_process = atoi(argv[1]);

        ptrace(PTRACE_ATTACH, traced_process, NULL, NULL);

        while(1){
                wait(&status);

                if(WIFEXITED(status)){
                    break;
                }

                ptrace(PTRACE_SYSCALL, traced_process, NULL, NULL);

        } // end of while

        return 0;

}

1 个答案:

答案 0 :(得分:0)

通过ptrace关于PTRACE_ATTACH的手册页,调用进程在ps输出中显示为子进程的父进程。但是,附加到ptrace监视进程的交互式服务守护程序(sshd或xinted)的PPID仍然是它们原始的INIT进程。我想知道为什么不改变手册中显示的PPID?