【发布时间】:2016-01-26 17:26:50
【问题描述】:
strace manpage 说:
在 Linux 上,虽然会令人兴奋,但跟踪 init 进程是 禁止。
我检查了同样的,它不允许:
$ strace -p 1
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
为什么不可能?甚至 ptrace 联机帮助页对跟踪 init 进程也有相同的说明。这些工具不是安全的,还是只是 init 进程被认为太特殊以至于没有其他进程(strace/ptrace)可以发出信号。
【问题讨论】:
-
该链接不涉及初始化进程。我知道如果该进程正在使用 gdb/valgrind 运行,则无法对其进行跟踪。但这是另一种情况。
-
只是一个半知半解的猜测,但很有可能
init进程由于它的生成方式(例如它没有有一个父进程,并且由于类似原因,进程元数据的其他位可能很奇怪),这意味着strace必须对事物进行一系列特殊处理才能与init一起工作,并且迄今为止,没有人看到跟踪init来实现代码的足够价值。 -
@twalberg:我无意strace init,只是好奇为什么它不能被追踪。我检查了
strace的工作。为了跟踪一个进程,它成为该进程的父进程,并且可以向它发送信号。可能不允许以这种方式弄乱init。