1. 问题:

pthread和fork是啥关系,gdb怎么调试线程,gdb的调试选项,thread.join为什么会报段错误,为什么thread清除用addinstance

总之线程、子进程及其调试等在脑海里只是招呼过从未清晰过,准备把这团浆糊弄清楚。


Detaching after fork from child process 5866.   // debug只能跟踪一条进程 这句话是把没有被debug的进程报给你  没debug的进程为啥那么多,哪儿来的

1529                    _driverDataThread->join();    
(gdb)
Program received signal SIGABRT, Aborted.
[Switching to Thread 0x7fe873bd0700 (LWP 5852)]

2. pid_t fork()

fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
   1)在父进程中,fork返回新创建子进程的进程ID;
   2)在子进程中,fork返回0;
   3)如果出现错误,fork返回一个负值;

coolshell.cn上有这个关于fork的面试题,开始看了答案都没看懂,现在弄懂了,贴上来

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main( void )
{
   int i;
   for (i=0; i<2; i++){
       fork();
       printf ( "-" );
   }

   return0;

}

这段函数会输出几个'-',刚开始了解fork,自然回答为6个。但他的考查点似乎除了fork的机制,还包含原始的c语言知识,printf(),有缓存,这里将会打印8个‘-’,如下图:0代表main进程。

如果加'\n'则打印的是6个。

注:对于块设备,只有当下面几种情况下才会被输入,1)遇到回车,2)缓冲区满,3)flush被调用。

wKioL1MzgpKRGOOSAABj-gndauM056.jpg

3. pid_t waitpid(pid_t pid,int * status,int options);