在Linux中跟踪init进程(PID 1)的系统调用:strace

3

strace的manpage中写道:

在Linux上,虽然很激动人心,但跟踪init进程是被禁止的。

我进行了检查,发现确实无法跟踪它:

$  strace -p 1
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted

为什么不可能呢?即使是ptrace手册也说可以追踪init进程。这些工具都安全,只是init进程被认为太特殊,没有其他进程(如strace/ptrace)可以向其发送信号。

http://askubuntu.com/questions/143561/why-wont-strace-gdb-attach-to-a-process-even-though-im-root - Jeyaram
那个链接没有讨论init进程。我知道如果进程正在使用gdb/valgrind运行,就无法对其进行strace。但这是另一种情况。 - brokenfoot
只是一个半猜测,但很可能是由于init进程的生成方式(例如,它没有父进程,可能还有其他一些进程元数据也因类似原因而不同),使其不完全成为一个真正的进程,这意味着strace必须对事物进行大量特殊处理才能与init一起工作,并且迄今为止,没有人看到足够的价值来跟踪init以实现代码。 - twalberg
@twalberg:我没有追踪init的目的,只是好奇为什么它不能被追踪。我检查了strace的工作情况。要跟踪一个进程,它会成为该进程的父进程,并且可以向其发送信号。可能以这种方式干扰init是不允许的。 - brokenfoot
1个回答

4

sudo strace -p 1 对我来说可行(你需要strace的root权限)
之前有办法允许我们调试init。在2.4.37版本中,无法附加init,但是在某些内核版本中,这个限制被移除了——我发现3.8内核版本

编辑:在我的Kubuntu 15.10中,strace手册中没有在Linux上,尽管这很令人兴奋,但禁止跟踪init进程。 更新了手册?


3
需要澄清的是:通常情况下,strace 不需要 root 权限,但如果要跟踪其他用户的进程,则需要该权限。 - nponeccop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接