[英]Hung process and Linux syscall 248?
我正在对特定计算机上即将推出的OpenSSL 1.1.0的悬挂式自测进行故障排除。 我试过两次调试此问题,这导致了两个无响应的GDB和两个挂起的进程:
$ ps -A | grep afalgtest
1030 pts/0 00:00:00 afalgtest
1196 pts/0 00:00:00 afalgtest
我能够杀死GDB,但无法杀死挂起的进程。
根据/proc/<pid>/syscall
,两者都在syscall 248中:
via:test$ sudo cat /proc/1030/syscall
248 0xb7fd6000 0x1 0xbfff98d4 0xb7fb9270 0xbfff98e0 0xb7ec45f7 0xbfff986c 0xb7fdbbe8
via:test$ sudo cat /proc/1196/syscall
248 0xb7fd6000 0x1 0xbfff98d4 0xb7fb9270 0xbfff98e0 0xb7ec45f7 0xbfff986c 0xb7fdbbe8
我正在使用VIA C7-D处理器运行计算机,它需要Lubuntu 15,因为它是支持VIA PM400图形芯片组的少数发行版之一。 Lubuntu 15使用4.2内核:
$ uname -a
Linux via 4.2.0-30-generic #36-Ubuntu SMP Fri Feb 26 00:57:19 UTC 2016 i686 i686 i686 GNU/Linux
下一步是:
$ cat /usr/include/asm-generic/unistd.h | grep 248
$
这什么也没返回。 接下来,catinging unistd.h
:
...
/*
* Architectures may provide up to 16 syscalls of their own
* starting with this value.
*/
#define __NR_arch_specific_syscall 244
#define __NR_wait4 260
__SC_COMP(__NR_wait4, sys_wait4, compat_sys_wait4)
#define __NR_prlimit64 261
__SYSCALL(__NR_prlimit64, sys_prlimit64)
#define __NR_fanotify_init 262
__SYSCALL(__NR_fanotify_init, sys_fanotify_init)
#define __NR_fanotify_mark 263
...
以防万一248
是0x248
:
$ cat /usr/include/asm-generic/unistd.h | grep 584
$
所以我的问题是,如何确定进程挂在哪个系统调用上?
看来我有最新的内核头文件:
$ sudo apt-get install linux-headers-$(uname -r)
Reading package lists... Done
Building dependency tree
Reading state information... Done
linux-headers-4.2.0-30-generic is already the newest version.
linux-headers-4.2.0-30-generic set to manually installed.
系统调用号为十进制。 您要查找的Syscall表可以在arch / x86 / entry / syscalls / syscall_32.tbl中找到。 无论如何,您正在检查错误的文件。 您要查看的是/ stack文件中提供的整个回溯。 内核足够好,不仅可以展开堆栈,而且可以解析所有符号。 或者,您可以使用调试器(称为崩溃)来检查实时内核。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.