Làm cách nào để xem hệ thống nào đang gọi chương trình Java của tôi đang thực hiện? Có một công cụ sẽ làm điều này trên Linux?Xem tất cả các cuộc gọi hệ thống được thực hiện bởi một chương trình Java
Trả lời
Sử dụng strace:
strace java your_program
thấy ltrace http://linux.die.net/man/1/ltrace
ptrace có thể hữu ích hơn trong trường hợp này –
@MikeKwan 'ltrace' là dành cho các cuộc gọi hàm thư viện và' ptrace' là để kiểm tra bộ nhớ của quá trình khác. 'strace' là lệnh gọi hệ thống. –
Sử dụng strace. Nhưng có là lừa cho trường hợp của tôi. Tùy chọn -f
là cần thiết. Ví dụ, đoạn mã sau:
public class Foo {
public static void main (String [] args) {
System.out.println("XXX");
}
}
Sau khi chạy javac Foo.java
để biên dịch nó, strace java Foo 2>&1 | grep write
in gì cả. Nhưng strace -f java Foo 2>&1 | grep write
in:
[pid 11655] write(3, "0x63", 4) = 4
[pid 11655] write(3, "\0", 1) = 1
[pid 11655] write(3, "\0", 1) = 1
[pid 11655] write(3, "\0", 1) = 1
[pid 11655] write(3, "\0", 1) = 1
[pid 11655] write(3, "\0", 1) = 1
[pid 11655] write(3, "\0", 1) = 1
[pid 11655] write(3, "\0", 1) = 1
[pid 11655] write(3, "\0", 1) = 1
[pid 11655] write(1, "XXX", 3XXX) = 3
[pid 11655] write(1, "\n", 1
[pid 11655] write(1, "XXX", 3XXX) = 3
cho thấy các cuộc gọi hệ thống được thực hiện cho System.out.println("XXX")
.
Bạn có thể sử dụng 'strace java your_program' không? – chrisaycock
Tôi đã thử nó và nó hoạt động. Cảm ơn – Ragini