理念上的状态
新建
子面意思
运行
task_struct在运行队列中排队,就叫做运行态
阻塞
等待非CPU资源就绪
挂起
当内存不足的时候,OS通过适当的置换进程的代码和数据到磁盘,进程的状态就叫做挂起
退出
子面意思
实际上的状态
R:对应运行态
代码:
#include <stdio.h>
#include <unistd.h>
int main()
{
while (1)
{
}
return 0;
}
进程信息
![]()
S:对应阻塞状态,是可中断睡眠
代码
#include <stdio.h>
#include <unistd.h>
int main()
{
while (1)
{
printf("hello world\n");
}
return 0;
}
进程信息
![]()
进程等待屏幕资源就绪的时间要远大于在CPU中运行的时间,所以最后是S状态
D:
磁盘睡眠,深度睡眠,不可被中断的睡眠
T:暂停状态
给S或R状态的进程发送一个19号信号使其暂停
![]()
t:暂停状态,调试的时候程序运行至断点处

gdb运行至断点处时,给进程发送了一个暂停信号
Z:
是什么
一个进程已经退出,但是还不允许被OS释放,处于一个被检测的状态
为什么
维持该状态,为了让子进程和父进程来回收
代码
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
pid_t id = fork();
if (id < 0)
{
perror("fork");
return 1;
}
else if (id == 0)
{
// child process
while (1)
{
printf("I am child, pid: %d, ppid: %d\n", getpid(), getppid());
sleep(5);
exit(1);
}
}
else
{
// father process
while (1)
{
printf("I am father, pid: %d, ppid: %d\n", getpid(), getppid());
sleep(1);
}
}
return 0;
}
进程信息

X:终止状态,瞬时性非常强
本文介绍了Linux进程的几种状态,包括运行态(R)、阻塞态(S,可中断睡眠)、深度睡眠(D)、暂停状态(T和t)以及退出状态(X)。通过示例代码展示了进程如何在不同状态间转换,特别强调了进程等待资源的时间可能使它进入S状态。此外,还提到了进程的暂停与调试,如GDB中的断点,以及Z状态表示已退出但等待回收的进程,特别是在子父进程交互中的作用。
1629

被折叠的 条评论
为什么被折叠?



