2012-12-13 23 views
9

Có cần thiết để chạy jstack -F như root (trên linux) và nếu có thì tại sao?Có cần thiết phải chạy jstack -F như root (trên linux) và nếu có thì tại sao?

Khi cố gắng jstack -F số của riêng mình quy trình tôi nhận được lỗi sau.

Lỗi gắn liền với quá trình: sun.jvm.hotspot.debugger.DebuggerException: Không thể đính kèm đến quá trình

jstack -F hoạt động tốt nếu tôi chạy nó với sudo.

Trả lời

10

Đó là vì jstack -F sử dụng cuộc gọi ptrace(2) hệ thống để thử và truy cập dữ liệu JVM, mà thất bại nếu bạn không có các quyền:

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

Từ ptrace(2) man:

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). 

Xem thêm capabilities(7). Sử dụng sudo, bạn có khả năng của root, bao gồm CAP_SYS_PTRACE.

Các vấn đề liên quan