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
(
"-"
);
}
return
0;
}
这段函数会输出几个'-',刚开始了解fork,自然回答为6个。但他的考查点似乎除了fork的机制,还包含原始的c语言知识,printf(),有缓存,这里将会打印8个‘-’,如下图:0代表main进程。
如果加'\n'则打印的是6个。
注:对于块设备,只有当下面几种情况下才会被输入,1)遇到回车,2)缓冲区满,3)flush被调用。
3. pid_t waitpid(pid_t pid,int * status,int options);