系统编程二

来源:互联网 发布:程序员中级考试 答案 编辑:程序博客网 时间:2024/06/06 03:57

进程状态转换

父进程通过一个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()的具体作用也是如下图所示:


0 0
原创粉丝点击