查看由Java程序进行的所有系统调用

Rag*_*ini 6 java linux system-calls

如何查看我的Java程序正在调用哪些系统?有没有一个工具可以在Linux上执行此操作?

Jin*_*Yao 11

使用strace.但是我的情况有诀窍.选项-f是必要的.例如,以下代码:

public class Foo {
    public static void main (String [] args) {
        System.out.println("XXX");    
    }
}
Run Code Online (Sandbox Code Playgroud)

运行javac Foo.java后编译它,strace java Foo 2>&1 | grep write什么都不打印.但strace -f java Foo 2>&1 | grep write印刷品:

[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
Run Code Online (Sandbox Code Playgroud)

[pid 11655] write(1, "XXX", 3XXX) = 3显示系统调用System.out.println("XXX").