Linux下的进程控制块—task_struct

Linux下的进程控制块

进程:程序的执行就是进程。也可以把进程看成一个独立的程序,在内存中有其对应的代码空间和数据空间,一个进程所拥有的数据和代码只属于自己。进程是资源分配的基本单位,也是调度运行的基本单位。

进程控制块(PCB)(系统为了管理进程设置的一个专门的数据结构,用它来记录进程的外部特征,描述进程的运动变化过程。系统利用PCB来控制 和管理进程,所以PCB是系统感知进程存在的唯一标志。进程与PCB是一 一对应的)。是进程存在和运行的唯一标志,在Linux中用task_struct这个结构体来表示。进程在操作系统中都有一个户口,用于表示这个进程。这个户口操作系统被称为PCB(进程控制块),这个结构体中有很多数据项,查看源代码时没必要理解全部的数据项,只需要在以后使用时再理解。理解为进程在操作系统中都有一个户口,用于表示这个进程。这个户口操作系统被称为PCB(进程控制块),在linux中具体实现是 task_struct数据结构,它记录了一下几个类型的信息:

它包含一些进程的信息,如:

1.状态信息,例如这个进程处于可执行状态,休眠,挂起等。

2.性质,由于unix有很多变种,进程有自己独特的性质。

3.资源,资源的链接比如内存,还有资源的限制和权限等。

4.组织,例如按照家族关系建立起来的树(父进程,子进程等)。

进程状态信息包含:

在Linux内核里,进程有时候也叫作任务。

R(running)

S(sleeping)

D(disk sleep)//sleep状态的一种,高并发io操作时,不能主动停止

T(stopped)

t(tracing stop)

X(dead)//终止进程

Z(zombie)//在进程被杀死时进程并不会直接结束,而是保存。

task_struct结构体的内容:

  1. struct task_struct
  2. {
  3. long state; /*任务的运行状态(-1 不可运行,0 可运行(就绪),>0 已停止)*/
  4. long counter;/*运行时间片计数器(递减)*/
  5. long priority;/*优先级*/
  6. long signal;/*信号*/
  7. struct sigaction sigaction[32];/*信号执行属性结构,对应信号将要执行的操作和标志信息*/
  8. long blocked; /* bitmap of masked signals */
  9. /* various fields */
  10. int exit_code;/*任务执行停止的退出码*/
  11. unsigned long start_code,end_code,end_data,brk,start_stack;/*代码段地址 代码长度(字节数)
  12. 代码长度 + 数据长度(字节数)总长度 堆栈段地址*/
  13. long pid,father,pgrp,session,leader;/*进程标识号(进程号) 父进程号 父进程组号 会话号 会话首领*/
  14. unsigned short uid,euid,suid;/*用户标识号(用户id) 有效用户id 保存的用户id*/
  15. unsigned short gid,egid,sgid; /*组标识号(组id) 有效组id 保存的组id*/
  16. long alarm;/*报警定时值*/
  17. long utime,stime,cutime,cstime,start_time;/*用户态运行时间 内核态运行时间 子进程用户态运行时间
  18. 子进程内核态运行时间 进程开始运行时刻*/
  19. unsigned short used_math;/*标志:是否使用协处理器*/
  20. /* file system info */
  21. int tty; /* -1 if no tty, so it must be signed */
  22. unsigned short umask;/*文件创建属性屏蔽位*/
  23. struct m_inode * pwd;/*当前工作目录i 节点结构*/
  24. struct m_inode * root;/*根目录i节点结构*/
  25. struct m_inode * executable;/*执行文件i节点结构*/
  26. unsigned long close_on_exec;/*执行时关闭文件句柄位图标志*/
  27. struct file * filp[NR_OPEN];/*进程使用的文件表结构*/
  28. /* ldt for this task 0 - zero 1 - cs 2 - ds&ss */
  29. struct desc_struct ldt[3];/*本任务的局部描述符表。0-空,1-代码段cs,2-数据和堆栈段ds&ss*/
  30. /* tss for this task */
  31. struct tss_struct tss;/*本进程的任务状态段信息结构*/
  32. };
时间: 2024-10-03 13:47:08

Linux下的进程控制块—task_struct的相关文章

Linux下的进程控制块——task_struct

在Linux中具体实现PCB的是 task_struct数据结构 我想说它真的很长很长...... ↓ 1 struct task_struct { 2 volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped *ruxia/ 3 void *stack; 4 atomic_t usage; 5 unsigned int flags; /* per process flags, defined below */ 6 unsigne

linux下查找进程及终止进程操作的相关命令

使用linux操作系统,难免遇到一些软件"卡壳"的问题,这时就需要使用linux下强大的kill命令来结束相关进程.这在linux系统下是极其容易的事情,你只需要kill xxx即可,这里xxx代表与此软件运行相关的进程PID号.首先,我们需要使用linux下另外一个命令ps查找与进程相关的PID号:ps aux | grep program_filter_word1)ps a 显示现行终端机下的所有程序,包括其他用户的程序.2)ps -A 显示所有程序.3)ps c 列出程序时,显示

linux下对进程按照内存使用情况进行排序

linux下对进程按照内存使用情况进行排序的命令为:ps aux --sort -rss 详细解说参见 http://alvinalexander.com/linux/unix-linux-process-memory-sort-ps-command-cpu

linux下查看进程路径

在linux下查看进程大家都会想到用 ps -ef|grep XXX可是看到的不是全路径,怎么看全路径呢?每个进程启动之后在 /proc下面有一个于pid对应的路径例如:ps -ef|grep python显示:oracle    4431  4366  0 18:56 pts/2    00:00:00 python Server.py4431就是进程号到/proc/4431下,ls -l 会看到:总用量 0-r--r--r--    1 oracle   oinstall        0

linux下查看进程占用端口和端口占用进程命令

Linux下查看进程占用端口: 查看程序对应进程号:ps –ef|grep 进程名 REDHAT :查看进程号所占用的端口号:netstat –nltp|grep 进程号 ubuntu:查看进程占用端口号:netstat -anp|grep pid Linux下查看端口号所使用的进程号: 使用lsof命令: lsof –i:端口号

在 Linux 下查看进程运行时间的命令

对于一个 Linux 系统的新手,该如何在我的 Ubuntu 服务器上查看一个进程(或者,根据进程 id 去查看)已经运行了多久呢?下面兄弟连Linux培训分享给大家好方法. ···你需要使用 ps 命令来查看关于一组正在运行的进程的信息.ps 命令提供了如下的两种格式化选项. etime 显示了自从该进程启动以来,经历过的时间,格式为 [[DD-]hh:]mm:ss. etimes 显示了自该进程启动以来,经历过的时间,以秒的形式. 如何查看一个进程已经运行的时间? 你需要在 ps 命令之后添

Linux下的进程与线程(二)—— 信号

Linux进程之间的通信: 本文主要讨论信号问题. 在Linux下的进程与线程(一)中提到,调度器可以用中断的方式调度进程. 然而,进程是怎么知道自己需要被调度了呢?是内核通过向进程发送信号,进程才得以知道的. Linux系统的进程之间是通过信号来通信的. 程序员在Shell上显式地发送信号使用的是kill命令,原型如下: kill -sigid [-]pid 其中, sigid指示的是信号的id,pid前若有-,则pid代表的为进程组id,否则pid代表的为进程id kill函数也有相同的作用

Linux下java进程CPU占用率高分析方法

Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用 1. 通过top命令找到可疑进程PID top - 09:37:18 up 70 days, 16:29, 2 users, load average: 1.13, 1.04, 0.97 Tasks: 105 total, 1 running

linux下的进程管理(进程的基本了解及查看pstree,ps,pgrep命令)

Linux下的进程管理 1.什么是进程?程序是静态的文件进程是运行中的程序的一个副本进程存在生命周期(准备期,运行期,终止期)2.进程状态 状态 定义 R(TASK_RUNNING) . 可执行状态(RUNNING,READY)running:正在被处理 ready: 在排队, cpu处理进程个数有限 S(TASK_INTERRUPTIBLE) 可唤醒状态 :在cpu上使用的时间超时,此时被打入休眠状态,随着程序的调用会被唤醒 D(TASK_UNINTERRUPTIBLE) 不可唤醒状态 T(T