2012-12-13 4 views
9

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

jstack -F my 自分のプロセスに次のエラーが発生しました。プロセスにアタッチ

エラー:sun.jvm.hotspot.debugger.DebuggerException:私は、sudoでそれを実行すると、正常に動作します-F工程

jstackにアタッチすることはできません。

答えて

10

jstack -Fはあなたが権利を持っていない場合は失敗したJVMデータを試してみて、アクセスするためのptrace(2)システムコール、使用しているためにです:ptrace(2) manから

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

を:

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が含まれます。

関連する問題