Linux进程状态与实时操作系统进程状态区别
一、Linux进程状态与实时操作系统进程状态区别linux上进程有9种状态:1. 可运行状态进程正在运行,或者已经就绪,随时由调度程序调度执行,进程刚被创建后处于可运行状态。2. 可中断等待状态进程被挂起处于等待状态,不会被调度执行;等待某个条件的形成或接受到信号 唤醒;进程获取资源之后就会进入可运行状态。3. 不可中断等待状态收到信号不唤醒和不可运行, 进程必须等
一、Linux进程状态与实时操作系统进程状态区别
linux上进程有9种状态:
1. 可运行状态
进程正在运行,或者已经就绪,随时由调度程序调度执行,进程刚被创建后处于可运行状态。
2. 可中断等待状态
进程被挂起处于等待状态,不会被调度执行;等待某个条件的形成或接受到信号 唤醒;进程获取资源之后就会进入可运行状态。
3. 不可中断等待状态
收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
4. 暂停状态
进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。
5. 跟踪状态
进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。
6. 僵死
表示该进程的执行被终止,但其父进程还没有调用wait4(),或者waitpid系统调用来返回有关终止进程的信息,因为在父进程调用wait系统调用前,内核不能丢弃包含在子进程中进程控制块中的数据,父进程需要知道子进程退出的状态。
7. 僵死撤销状态父进程已经调用wait4或waitpid系统调用。
8. 不可交互等待状态进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。
9.死亡状态进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。
嵌入式实时操作系统有6种状态:
1.就绪态
进程已经获取被调度的资源,但是此时由于优先级的原因没有被调度到就处于就绪态,进程刚被创建之后处于就绪态。
2.运行态
进程已经被调度器调度到,已经获取了CPU的控制权。
3.阻塞态
进程由于接受不到消息,或者获取不到信号量,进入对资源的阻塞状态。
4.延时态
通过调用任务延时等接口,将任务进入延时态。
5.挂起态
通过调用任务挂起等接口,讲任务进入挂起态。
Linux进程状态 | 实时操作系统进程状态 |
可运行状态 | 就绪态、运行态 |
可中断等待状态 | 挂起态、阻塞态、挂起态 |
ps工具标识进程的5种状态码:
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct ("zombie") process
注: 其它状态还包括W(无驻留页), <(高优先级进程), N(低优先级进程), L(内存锁页).
可以用下面命令查看进程状态
ps -aux
列出类似程序树的程序显示(显示进程下有哪些子进程)
ps -axjf
找出与 cron 与 syslog 这两个服务有关的 PID 号码
ps aux | egrep '(cron|syslog)'
也可以这样使用ps格式输出来查看进程状态:
ps -eo user,stat..,cmd
user 用户名
uid 用户号
pid 进程号
ppid 父进程号
size 内存大小, Kbytes字节.
vsize 总虚拟内存大小, bytes字节(包含code+data+stack)
share 总共享页数
nice 进程优先级(缺省为0, 最大为-20)
priority(pri) 内核调度优先级
pmem 进程分享的物理内存数的百分比
trs 程序执行代码驻留大小
rss 进程使用的总物理内存数, Kbytes字节
time 进程执行起到现在总的CPU暂用时间
stat 进程状态
cmd(args) 执行命令的简单格式
例子:
查看当前系统进程的uid,pid,stat,pri, 以uid号排序.
ps -eo pid,stat,pri,uid --sort uid
查看当前系统进程的user,pid,stat,rss,args, 以rss排序.
ps -eo user,pid,stat,rss,args --sort rss
在Linux下,还有一种方法检查某个进程是否存在:利用/proc文件系统. /proc/pid/stat里面有进程的状态,进程可执行文件名等.如果该文件不存在了,那进程肯定退出了.如果存在,可以检查状态和文件名是否正确.效率可能比PS还是高一些,因为/proc是虚拟文件系统,存在与内存中.
如何利用/proc文件系统
cat /proc/pid/status
这里pid是你的进程ID,看看输出结果,有一栏是State
你要利用/proc文件系统时,int fd = open( "/proc/pid/status", O_RDONLY );
这里pid是实际的进程的pid,如果open失败,刚进程显然不存在,然后读取该文件的内容,找出State
更多推荐
所有评论(0)