Linux:task_struct剖析

首先我们需要了解什么是进程?

进程
与应用程序相关联

1.是程序的一个执行实例
2.是正在执行的程序

进程的相关命令

1.查看进程:ps
2.查看当前操作系统的所有进程:ps aux 
3.查看某个进程:ps aux | grep X(X代表某进程的名字)
             例如:查看vim的进程:
             查看vim的进程:ps aux | grep vim

这里写图片描述

这里写图片描述

这里写图片描述
进程与可执行程序的区别

进程:存在于内存中
可执行程序:存在于磁盘中
例如:
命令:rm  文件名
此命令执行后进程还存在吗?
  答案:进程还是存在的,因为命令 "rm  文件名" 删除的是可执行程序,而不是进程

描述进程—>PCB

   操作系统管理对象,它不是直接进行管理的,而是通过媒介,我们所说的PCB就可以说是一个媒介。
  操作系统管理进程时,它是通过管理进程的有效信息来管理进程的,而所有进程的有效信息会被存放到一个进程控制块的数据结构中,这个进程控制块可以说是进程属性的集合,而这个进程控制块的名字就是"PCB"
  task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里,并且包含着进程的信息
 每个进程都把他的信息存放在task_struct这个数据结构体中,进程的创建、进程的终止、进程的切换都与task_struct有关

task_struct的组成

1.标示符:描述进程的"唯一标示符",用来区别别的进程
         例如:PID(用来标示子进程),PPID(用来标示父进程)
2.状态:任务(状态)状态,退出代码,退出信号
       进程的状态:睡眠、运行、挂起等状态
3.优先级:相对于其他进程的优先级
         例如:如果有好几个进程都在执行,那就会涉及到那个进程先执行那个进程后执行,这就会和进程的优先级有关
4.程序计数器:程序中即将被执行的下一条指令的地址
     注:一个进程一个程序计数器
5.内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
6.上下文数据:进程执行时处理器的寄存器中的数据
7.I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表
8.记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等
9.其他信息
注意:所有运行在系统中的进程都以"task_struct双向链表"的形式存放在Linux内核中

标示符

PID
通过系统调用获得进程标示符

这里写图片描述
代码:

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
 int main()
 {
     printf("pid:%d\n",getpid());
     printf("ppid:%d\n",getppid());
     return 0;
 }

运行结果:

这里写图片描述

子进程与父进程

这里写图片描述

状态

R--->运行状态
     并不意味着进程一定在运行中,它表明进程有两种可能:第一种是进程在运行中,第二种是进程在队列中
S--->睡眠状态
     意味着进程在等待事件完成,这里的睡眠有时候也叫做可中断睡眠
D--->磁盘休眠状态
     有时候也叫不可中断睡眠,在这个状态的进程通常都会等待I/O的结束
T--->停止状态
     可以通过发送SIGSTOP信号给进程来停止(T)进程,这个被停止的进
程可以通过发送SIGSTOP信号让进程继续进行
X--->死亡状态
     这个状态只是一个返回状态,不会再任务列表里看到此状态。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值