Segfault进程ID和核心转储进程ID是不同的。 为什么?

在Linux消息文件中,我注意到进程14947报告了一个段错误,但是我没有得到进程14947的核心转储,而是得到了14069.core。(它的生成时间与段错误的时间匹配)。

然后我使用gdb并find: –

Program terminated with signal 11, Segmentation fault. [New process 14947] [New process 26131] [New process 26130] [New process 26129] [New process 26128] [New process 14945] [New process 14842] [New process 14726] [New process 14598] [New process 14069] 

当我运行“信息线程”时,我得到: –

 (gdb) info thread 10 process 14069 0xffffe410 in __kernel_vsyscall () 9 process 14598 0xffffe410 in __kernel_vsyscall () 8 process 14726 0xffffe410 in __kernel_vsyscall () 7 process 14842 0xffffe410 in __kernel_vsyscall () 6 process 14945 0xffffe410 in __kernel_vsyscall () 5 process 26128 0xffffe410 in __kernel_vsyscall () 4 process 26129 0xffffe410 in __kernel_vsyscall () 3 process 26130 0xffffe410 in __kernel_vsyscall () 2 process 26131 0xffffe410 in __kernel_vsyscall () * 1 process 14947 0x006a8300 in pthread_mutex_lock () 

所以这里是我的问题:

  1. 为什么coredump文件名与消息文件中的segfault进程ID不匹配?
  2. 我认为coredump是针对一个特定的进程,为什么有这么多的信息,如“[新进程26130]”在这里?
  3. 为什么“信息线程”将显示进程的信息,而不是线程?

谢谢!

Plus:我的操作系统是RHEL5。

在Linux中,内核线程只是轻量级的进程(虚拟内存被标记为与父进程共享而不是标记为写时拷贝的进程),因此所列出的进程ID与线程ID。 这只是一个猜测,但核心的ID可能与处理信号的线程相同,可能与主线程不一样。