10

(Linuxでは)rootとしてjstack -Fを実行する必要がありますか?その場合、その理由は何ですか?

自分のプロセスをjstack-Fしようとすると、次のエラーが発生します。

プロセスへのアタッチ中にエラーが発生しました:sun.jvm.hotspot.debugger.DebuggerException:プロセスにアタッチできません

jstack -Fは、sudoで実行すると正常に動作します。

4

1 に答える 1

14

これjstack -Fは、ptrace(2)システム コールを使用して JVM データへのアクセスを試行し、権限がない場合は失敗するためです。

$ strace -e all -f jstack -F 26846
...
[pid 27653] ptrace(PTRACE_ATTACH, 26846, 0, 0) = -1 EPERM (Operation not permitted)
...

ptrace(2)より:

EPERM  The specified process cannot be traced. This could be because the parent
       has insufficient privileges (the required capability is CAP_SYS_PTRACE);
       unprivileged  processes  cannot trace processes that they cannot send
       signals to or those running set-user-ID/set-group-ID programs, for obvious
       reasons.  Alternatively, the process may already be being traced, or be
       init(8) (PID 1).

capabilities(7)も参照してください。を使用sudoすると、 を含む root の機能を取得できますCAP_SYS_PTRACE

于 2012-12-17T16:16:42.980 に答える