对于面经中进程和线程的区别中的"多个线程依附于一个进程,共享于这个进程的数据和地址空间,当多个线程中的某一个线程死掉以后,这个进程也跟着死掉了"这句话的理解
"多个线程依附于一个进程,共享于这个进程的数据和地址空间,当多个线程中的某一个线程死掉以后,这个进程也跟着死掉了"
首先我们要了解正常退出与异常退出
正常退出
1.main函数调用return
2.进程调用exit(),标准C库
3.进程调用_exit()或者_Exit(),属于系统调用
4.进程最后一个线程返回
5.最后一个线程调用pthread_exit
异常退出
1.调用abort
2.当进程收到某些信号时,ctrl+c
3.最后一个线程对取消请求做出响应
这里的死掉指的是线程的异常退出
当多个线程依附于一个进程的时候,其中一个线程正常退出的话,进程中如果还有其它线程的话就不会受到影响,如果没有线程的话,进程也会退出。如果线程异常退出的话,整个进程都跟着退出。
补充:主线程和子线程
设想这样一个问题:比如一个程序,a为主线程,从a中生成子线程b1,b2,从b1中生成子线程c1,c2.
1.此时,如果父线程b1运行完毕,子线程c1仍在运行,此时c1会否因为b1的消灭而被迫消灭,还是c1会继续运行?
2.如果主线程a消灭,是否b1,b2,c1,c2也会强迫被消灭?
3.主线程a是否是进程中第一个创建的线程同时也是最后一个消灭的线程?
首先我们要清楚的知道所谓的主线程与子线程的区别其实就是,进程与线程的区别,主线程就是与进程直接关联的那个线程,如果主线程出问题了,也就说明是进程出问题了,那么就是进程和线程之间的关系
1.不会,因为除了主线程(进程)之外的线程之间的关系是平行关系,不会因为某一个线程的退出而使得另外一个线程退出。当然是在正常退出的前提下
2.会的,因为主线程a退出其实就是意味着进程退出,进程都结束了,那么线程也活不了
3.是的,因为所谓的主线程就是进程
总结:其实线程没有主次之分,所谓的主线程,子线程,孙线程…都只不过是进程和线程之间的关系罢了