如果您的进程在系统调用中被阻止,您可以使用strace
它来找出它是什么。请注意,该strace
二进制文件可能未安装在您的 android 系统上,但在最新版本的busybox
. 此外,您可能需要 root 访问权限,因此您需要越狱您的 android 设备。
这是一个人为的例子。
$ mkfifo /tmp/foo
$ cat /tmp/foo & # blocks
$ ps # note pid of the blocked "cat" process; in my case it's 29739
$ sudo strace -p 29739 # attach to the process
在这种情况下 strace 的输出是:
Process 29739 attached - interrupt to quit
open("/tmp/foo", O_RDONLY^C <unfinished ...>
然后 strace 将与您的进程一起挂起;按 ctrl-c 打破。
这是另一个例子:
$ nc -l 8888 &
[2] 31087
$ sudo strace -p 31087
Process 31087 attached - interrupt to quit
accept(3,
在这种情况下,您可能想知道它想要做什么accept
;您可以为此使用 /proc 文件系统:
$ ls -l /proc/31087/fd/3
lrwx------ 1 abliss abliss 64 Jun 25 12:22 /proc/31087/fd/3 -> socket:[2265625]
如果您的进程在 java 线程中被阻塞,您可能会更幸运地使用 android 工具附加调试器,如jdb
.