如何查看我的 Java 程序正在进行哪些系统调用?是否有可以在 Linux 上执行此操作的工具?
问问题
8199 次
3 回答
15
使用 strace。但我的情况有一个窍门。选项-f
是必需的,与 相同--follow-forks
。例如,下面的代码:
public class Foo {
public static void main (String [] args) {
System.out.println("XXX");
}
}
运行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
[pid 11655] write(1, "XXX", 3XXX) = 3
显示为 进行的系统调用System.out.println("XXX")
。
于 2013-03-04T05:27:34.680 回答
12
于 2012-04-30T15:58:30.323 回答
1
见 ltrace http://linux.die.net/man/1/ltrace
于 2012-04-30T13:56:15.883 回答