挂起进程和Linux系统调用248?

时间:2016-03-13 06:46:11

标签: linux system-calls hang

我正在为特定机器上即将推出的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,两者都在系统调用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

我正在使用威盛C7-D处理器运行一台机器,它需要Lubuntu 15,因为它是支持威盛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
$

什么都不返回。接下来,cat'ing 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
...

以防2480x248

$ 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.

1 个答案:

答案 0 :(得分:1)

系统调用号是十进制的。您正在寻找的Syscall表可以在arch / x86 / entry / syscalls / syscall_32.tbl中找到。无论如何,您正在检查错误的文件。你想看到的是/ stack文件中提供的整个回溯。内核非常好,不仅可以展开堆栈,还可以解析所有符号。或者,您可以使用调试器(名为crash)来检查实时内核。