





一个进程所具有的状态为操作系统的进程状态设计提供了理论依据。实际上不同的操作系统设计不同的进程状态
当一个进程被创建但没有入队列,即代码和数据被拷贝➕建立PCB结构体➕ 为其分配一个唯一的进程标识符(PID)[不是不就绪的状态]实际上 linux内核不存在这种状态 这种状态只是为了更好的理解而描述的 在实际中 一个进程被创建后就会入运行队列
进程已经满足运行条件,PCB进入CPU运行队列,排队等待系统分配CPU资源
PCB被调度到CPU运行队列中且已被分配CPU资源。只有运行状态下的进程才能占用CPU资源
阻塞状态


目的意义作用
释放内存资源,给其他进程提供执行机会。
挂起状态
挂起状态的认识

磁盘的SWAP分区会满吗?

R运行状态(running): 进程正在运行或者在运行队列中等待S睡眠状态(sleeping) /可中断睡眠(interruptible sleep): 即阻塞状态 进程在等待某事件完成 (可被唤醒/中断 如程序中在执行sleep(10); 时 发送kill -19 PID信号)[(阻塞、挂起)]D休眠状态(Disk sleep)/不可中断睡眠状态(uninterruptible sleep): 磁盘休眠/进程休眠 进程通常会等待IO的结束(不可被中断 不可被唤醒)[(IO阻塞、IO挂起)]T信号暂停状态(stopped): 发送 SIGSTOP 信号来暂停进程。可以发送 SIGCONT 信号让进程继续运行。t调试暂停状态(tracing stop):进程被调试器(如gdb)跟踪调试,暂停了进程的执行。调试器设置了断点或执行了单步调试操作X死亡/终止状态(dead):多个进程终止 OS需要一个一个回收 但也是一瞬间的 瞬时性很强 只是一个返回状态,无法在任务列表看到这个状态。Z僵尸状态(zombie):一个已经终止的子进程,但其 父进程/OS 尚未检测到子进程的退出状态。以下代码执行时 状态是S+
while(1)
{
printf("hello linux!\n");
}
printf("hello linux!\n"); 进程的状态变为R+ 不需要访问外设 只运行代码 : 运行状态(可能在运行队列中等待可能正在被CPU调度/执行)以下代码执行时 状态是S+
int a = 0;
sacnf("%d", &a);
while(1)
{
printf("hello linux!\n");
}
等待输入 – 阻塞状态 S+
+号: 当前进程处于前台进程: 无法执行命令cmd 命令行解释器无法解释命令 可以ctrl+c终止 如何让他在后台执行?
./ test &.
如何杀死这个进程?
kill -9 PID

为了省电省钱 企业会在午夜将磁盘转速降低 但是如果此时有大量进程需要访问磁盘 (状态为D) 而磁盘IO效率低下 将有更多的进程处于D状态 此时服务器压力过大 而OS又无法杀死他们 有可能造成OS昏迷或宕机
那么就需要了解以下DD命令
Linux DD命令是一种用于复制和转换文件的命令行工具。它可以从一个文件或设备复制数据,并将其写入另一个文件或设备。DD命令可以用于创建磁盘映像,备份和还原硬盘分区,以及在不同的数据存储格式之间进行转换。以下是一些DD命令的常见用法:
dd if=/dev/sda of=/dev/sdb
上述命令将/dev/sda设备的内容复制到/dev/sdb设备中。
dd if=/dev/sda of=/path/to/image.img
上述命令将/dev/sda设备的内容复制到名为image.img的文件中。
dd if=/path/to/input.img of=/dev/sda bs=512 conv=notrunc
上述命令将名为input.img的文件中的数据写入到/dev/sda设备中,并将块大小设置为512字节。"conv=notrunc"选项表示不截断输出文件。
int main()
{
pid_t id = fork();
if(id < 0)
{
//创建失败
perror("fork");
return 1;
}
else if(id == 0)
{
//child process(task)
while(1)
{
printf("I am child, pid: %d, ppid: %d\n", getpid(), getppid());
sleep(3);
break;
}
exit(0);
}
else
{
//parent process
while(1)
{
printf("I am father, pid: %d, ppid: %d\n", getpid(), getppid());
sleep(1);
}
}
return 0;
}
