进程状态转换

父进程通过一个fork()可以生出一个子进程,此时是就绪状态(task_running),它是在等待cpu的调度(schedule),如果它被CPU调度了,就会变成执行态(task_running)。如果此时需要等待资源(好比是排队排到你了,但你忘记带钱了),就进入睡眠状态,可分为浅度睡眠和深度睡眠。浅的可以被信号中断唤醒,深的不行,浅的一般都是等待一个软件信号,深的都是硬件信号,比如一个键盘按钮。当你回去取钱回来时候,又重新进入了就绪状态。  执行态收到暂停信号(SIGSTOP,SIGTSTP)时候,就会进入暂停状态(TASK_STOPPED,TASK_TRACED)。当它收到SIGCONT信号时,会重新进入就绪状态。执行状态退出之后会变成僵尸状态(EXIT_ZOMBIE),它可以通过多种情况退出,如下图所示。死的时候不会立刻释放进程,此时被称为僵尸态。他要先跟父进程报告下他怎么死的,任务完成的怎么样等信息,这些信息都是存在task_struct结构体里面。要等父进程通过调用wait()才会回收资源,这时子进程就变成死亡状态(EXIT_DEAD)。wait还可以同步父子进程。因为一开始父进程子进程是并发的,他们是自己干自己的事,没有先后状态。如果父进程调用了wait()那么就等待子进程了,这时候就同步了。wait()的具体作用也是如下图所示:

系统编程二

相关文章:

  • 2021-06-06
  • 2021-09-22
  • 2021-12-31
  • 2021-07-12
  • 2021-08-19
  • 2021-09-07
  • 2021-08-07
  • 2021-05-17
猜你喜欢
  • 2021-09-25
  • 2021-12-22
  • 2021-11-05
  • 2022-12-23
  • 2021-06-12
  • 2021-08-25
  • 2021-06-22
相关资源
相似解决方案