目录
进程的状态
cpp
pid_t id=fork();
if(id<0)
{
perror("fork");
return 1;
}
else if(id==0)
{
//child
while(1)
{
printf("Son process,pid :%d ,ppid :%d\n",getpid(),getppid());
sleep(1);
}
}
else
{
//parent
while(2)
{
printf("Parent process,pid :%d ,ppid :%d\n",getpid(),getppid());
sleep(3);
}
}
这段代码printf时必须加上\n将其设置为行刷新。否则无法实时打印。
从操作系统的角度宏观的看待进程状态:
1.一个CPU一个运行队列
2.让进程入队列,本质:将该进程的task_struct结构体对象放入运行队列中。
3.进程PCB在runqueue,就是R(运行状态),并不是这个进程在运行,才是运行状态
4.进程不止占用CPU的资源,也可能随时需要外设资源
5.所谓的进程不同状态,本质是进程在不同队列中,等待某种资源
cpp
int a=1;
while(1)
{
printf("当前进行: %d",a;
)
./myprocess执行一下
S:
printf->显示器(外设->满)等待显示器就绪需要花费大量的时间(相对CPU而言)
%99等待IO就绪,%1执行打印代码
T:
向一个R状态的进程发送19号信号其状态就会变为T.
在发送一次18号信号就可以将其状态恢复为R
R/R+
R+前台进程,R为后台进程。
后台进程不能用ctrl+c终止,只能向其发送9号信号。
D
高IO情况才有可能出现。
处于深度睡眠状态的进程无法被OS杀掉,只能通过断电,或进程自己主动醒来。来解决。