繁体   English   中英

挂进程和Linux syscall 248?

[英]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
...

以防万一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.

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM