strace的manpage中写道: 在Linux上,虽然很激动人心,但跟踪init进程是被禁止的。 我进行了检查,发现确实无法跟踪它: $ strace -p 1 attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted 为什么不可能呢?即使是ptrace手册也说可以追踪init进程。这些工具都安全,只是init进程被认为太特殊,没有其他进程(如strace/ptrace)可以向其发送信号。
sudo strace -p 1 对我来说可行(你需要strace的root权限) 之前有办法允许我们调试init。在2.4.37版本中,无法附加到init,但是在某些内核版本中,这个限制被移除了——我发现3.8内核版本。 编辑:在我的Kubuntu 15.10中,strace手册中没有在Linux上,尽管这很令人兴奋,但禁止跟踪init进程。 更新了手册?
init
进程的生成方式(例如,它没有父进程,可能还有其他一些进程元数据也因类似原因而不同),使其不完全成为一个真正的进程,这意味着strace
必须对事物进行大量特殊处理才能与init
一起工作,并且迄今为止,没有人看到足够的价值来跟踪init
以实现代码。 - twalbergstrace
的工作情况。要跟踪一个进程,它会成为该进程的父进程,并且可以向其发送信号。可能以这种方式干扰init
是不允许的。 - brokenfoot