Linux中 进程正在运行,ps命令显示S+??? 10
我的loop程序很简单,如下所示#include<stdio.h>intmain(){while(1){printf("hello\n");}return0;}这个程序就...
我的loop程序很简单 ,如下所示
#include <stdio.h>
int main()
{
while (1)
{
printf("hello\n");
}
return 0;
}
这个程序就一直打印hello,而已。我在一个终端上运行它,
在另外一个终端用ps观察进程状态,却总是说处于S+(前台睡眠),不知Linux为什么这样安排?还是有别的原因?
如果说ps观察的只是瞬间的话,我用top来查看也是一样的结果,求大侠 解释。。。。?
[user@MagicLinux apuetest]$ ps u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 9089 0.0 0.3 5852 1616 pts/1 Ss 07:28 0:01 /bin/bash
user 10306 0.0 0.2 5548 1484 pts/2 Ss 08:55 0:00 /bin/bash
user 12418 4.4 0.0 1392 296 pts/2 S+ 11:36 0:00 ./loop
user 12422 0.0 0.1 5488 832 pts/1 R+ 11:36 0:00 ps u
top的结果是
4501 user 25 0 55916 18m 12m R 86.7 3.7 8:18.14 konsole
3520 root 15 0 35532 14m 2108 S 8.0 3.0 7:39.54 X
12418 user 15 0 1392 296 236 S 4.0 0.1 0:19.51 loop
3732 user 15 0 16608 4740 496 S 1.3 0.9 0:14.11 fcitx
1 root 16 0 1540 528 464 S 0.0 0.1 0:01.65 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root 10 -5 0 0 0 S 0.0 0.0 0:00.77 events/0
4 root 11 -5 0 0 0 S 0.0 0.0 0:00.05 khelper
5 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthread
7 root 10 -5 0 0 0 S 0.0 0.0 0:00.09 kblockd/0
8 root 20 -5 0 0 0 S 0.0 0.0 0:00.00 kacpid
175 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khubd 展开
#include <stdio.h>
int main()
{
while (1)
{
printf("hello\n");
}
return 0;
}
这个程序就一直打印hello,而已。我在一个终端上运行它,
在另外一个终端用ps观察进程状态,却总是说处于S+(前台睡眠),不知Linux为什么这样安排?还是有别的原因?
如果说ps观察的只是瞬间的话,我用top来查看也是一样的结果,求大侠 解释。。。。?
[user@MagicLinux apuetest]$ ps u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 9089 0.0 0.3 5852 1616 pts/1 Ss 07:28 0:01 /bin/bash
user 10306 0.0 0.2 5548 1484 pts/2 Ss 08:55 0:00 /bin/bash
user 12418 4.4 0.0 1392 296 pts/2 S+ 11:36 0:00 ./loop
user 12422 0.0 0.1 5488 832 pts/1 R+ 11:36 0:00 ps u
top的结果是
4501 user 25 0 55916 18m 12m R 86.7 3.7 8:18.14 konsole
3520 root 15 0 35532 14m 2108 S 8.0 3.0 7:39.54 X
12418 user 15 0 1392 296 236 S 4.0 0.1 0:19.51 loop
3732 user 15 0 16608 4740 496 S 1.3 0.9 0:14.11 fcitx
1 root 16 0 1540 528 464 S 0.0 0.1 0:01.65 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root 10 -5 0 0 0 S 0.0 0.0 0:00.77 events/0
4 root 11 -5 0 0 0 S 0.0 0.0 0:00.05 khelper
5 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthread
7 root 10 -5 0 0 0 S 0.0 0.0 0:00.09 kblockd/0
8 root 20 -5 0 0 0 S 0.0 0.0 0:00.00 kacpid
175 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khubd 展开
展开全部
首先,进程运行就代表从就绪队列中获取到了CPU资源,即被调度,当运行的时候,CPU从内存中获取该进程的代码和数据,进行处理之后,重新写入到内存中,然后你使用了printf库函数,这是一次IO操作,而且是站在进程角度的IO操作,那么就要遵守冯诺依曼体系结构,因为外设的传输效率低于内存,所以,这里处在了等待显示器取走数据并打印的过程,所以,你的进程状态变成了S,这个时候,CPU去处理其他的事情,当你的数据被显示器打印的时候,你的进程重新被放入就绪队列,然后CPU的轮转调度(也就是并发下各进程时间片到了),轮到你的时候,又是同样的一次,因为时间很快,所以你看到的都是S
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询