gdb 无法附加到进程
gdb cannot attach to process
这是我正在使用的OS:
Linux securecluster 4.9.8-moby #1 SMP Wed Feb 8 09:56:43 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
当尝试以 root 用户身份将 gdb 附加到挂起的进程时,我得到以下信息:
Attaching to process 9636
Could not attach to process. If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf
ptrace: Operation not permitted.
我修改了 /etc/sysctl.d/10-ptrace.conf ,导致:
kernel.yama.ptrace_scope = 0
但是,我得到了同样的错误。
我尝试更改 /proc/sys/kernel/yama/ptrace_scope :
echo 0 | tee /proc/sys/kernel/yama/ptrace_scope
tee: /proc/sys/kernel/yama/ptrace_scope: Read-only file system
感谢提示。
I modified /etc/sysctl.d/10-ptrace.conf
这只会在下次重启时生效。
在那之前,只需sudo sysctl -w kernel.yama.ptrace_scope=0
您使用的是容器引擎吗?尝试从容器外部(在主机上)附加到进程;那里可能有不同的 PID。
或者,启动具有 CAP_SYS_PTRACE
功能的容器(例如,使用 --cap-add=SYS_PTRACE
)。当然,如果你不能重现挂起,那么你就不能使用这种方法。
@Ted @escapecharacter 您所指的内核参数是从主机系统中获取的,这就是为什么它是只读的,您不能从容器内部编辑实际的配置文件。您可以在容器中覆盖它,只需将 -w 标志放到 #sudo sysctl kernel.yama.ptrace_scope=0 即可。一个永久的解决方案是在主机节点上执行此操作,默认情况下所有容器都会继承它。
这是我正在使用的OS:
Linux securecluster 4.9.8-moby #1 SMP Wed Feb 8 09:56:43 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
当尝试以 root 用户身份将 gdb 附加到挂起的进程时,我得到以下信息:
Attaching to process 9636
Could not attach to process. If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf
ptrace: Operation not permitted.
我修改了 /etc/sysctl.d/10-ptrace.conf ,导致:
kernel.yama.ptrace_scope = 0
但是,我得到了同样的错误。 我尝试更改 /proc/sys/kernel/yama/ptrace_scope :
echo 0 | tee /proc/sys/kernel/yama/ptrace_scope
tee: /proc/sys/kernel/yama/ptrace_scope: Read-only file system
感谢提示。
I modified /etc/sysctl.d/10-ptrace.conf
这只会在下次重启时生效。
在那之前,只需sudo sysctl -w kernel.yama.ptrace_scope=0
您使用的是容器引擎吗?尝试从容器外部(在主机上)附加到进程;那里可能有不同的 PID。
或者,启动具有 CAP_SYS_PTRACE
功能的容器(例如,使用 --cap-add=SYS_PTRACE
)。当然,如果你不能重现挂起,那么你就不能使用这种方法。
@Ted @escapecharacter 您所指的内核参数是从主机系统中获取的,这就是为什么它是只读的,您不能从容器内部编辑实际的配置文件。您可以在容器中覆盖它,只需将 -w 标志放到 #sudo sysctl kernel.yama.ptrace_scope=0 即可。一个永久的解决方案是在主机节点上执行此操作,默认情况下所有容器都会继承它。