线程挂之后进程一定会挂吗?什么情况不会挂?
答案:在Java里,线程出错且未捕捉异常时,线程会崩溃,但JVM(进程)不会崩溃。
在保证不影响其他线程情况下:

  1. 使用系统接口(没有做健壮性相关处理):用户级线程会,内核不会。
  2. 使用高级语言(比如java):线程崩溃在java虚拟机内会处理异常,用户级线程大多数情况下不会,内核级线程也不会。
    一般崩溃肯定伴随栈溢出、读取或者访问了非法地址。如果崩溃线程的非法访问影响了其他线程,则进程可能会崩溃。

僵尸进程、孤儿进程是因为什么原因产生的?

[进程上下文切换、线程上下文切换,分别保存了什么,恢复了什么?中断上下文切换

  1. 进程上下文切换
    首先,进程的切换只发生在内核态,所以进程上下文不仅包括用户空间资源(虚拟内存、栈、全局变量),还包括内核空间的状态信息(内核堆栈、寄存器)
  2. 线程上下文切换
    Case1: 进程只有一个线程时,相当于进程上下文切换。
    Case2: 有多个线程且线程属于不同进程时,资源不共享,类似进程上下文切换。
    Case2: 有多个线程且线程属于同一个进程时,虚拟内存是共享的,无需修改。线程的私有数据、栈、寄存器等不共享资源需要保存,切换回来的时候也需要恢复。
  3. 中断上下文切换
    发生在内核态,对同个CPU来说中断处理比进程优先级更高,中断会打断正常进程的调度执行。
    即使中断打断了一个正在用户态的进程,也不需要保存、恢复进程的虚拟内存、全局变量等用户态资源。中断上下文只包括中断服务程序的状态(CPU寄存器、内核堆栈、硬件中断参数)