[Linux]进程(十二)--task_struct结构体

[cpp] view plaincopy

  1. struct task_struct {
  2. volatile long state; /* -1 不可运行, 0 可运行, >0 表示停止 */
  3. void *stack;
  4. atomic_t usage;
  5. unsigned long flags; /* 每进程标志 */
  6. unsigned long ptrace;
  7. int lock_depth; /* 大内核锁深度 */
  8. int prio, static_prio, normal_prio;
  9. struct list_head run_list;
  10. const struct sched_class *sched_class;
  11. struct sched_entity se;
  12. unsigned short ioprio;
  13. unsigned long policy;
  14. cpumask_t cpus_allowed;
  15. unsigned int time_slice;
  16. #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
  17. struct sched_info sched_info;
  18. #endif
  19. struct list_head tasks;
  20. /*
  21. * ptrace_list/ptrace_children forms the list of my children
  22. * that were stolen by a ptracer.
  23. */
  24. struct list_head ptrace_children;
  25. struct list_head ptrace_list;
  26. struct mm_struct *mm, *active_mm;
  27. /* 进程状态 */
  28. struct linux_binfmt *binfmt;
  29. long exit_state;
  30. int exit_code, exit_signal;
  31. int pdeath_signal; /* 在父进程终止的时候发送的信号 */
  32. unsigned int personality;
  33. unsigned did_exec:1;
  34. pid_t pid;
  35. pid_t tgid;
  36. struct task_struct *real_parent; /* 真正的父进程(被调试的情况下) */
  37. struct task_struct *parent; /* 父进程 ,parent和real_parent的区别:real_parent是亲爹,调fork的那个,parent呢是干爹,大部分情况下亲爹干爹是一个人,ps看到的是干爹,什么时候亲爹干爹不一样的,比如有一种情况,比如亲爹死了,但是呢又得有一个父进程,比如1号进程就会被当成父进程。但进程不是1号fork出来的。*/
  38. struct list_head children; /* 子进程链表 */
  39. struct list_head sibling; /* 连接到父进程的子进程的链表 */
  40. struct task_struct *group_leader; /* 线程组组长 */
  41. /* PID与PID散列表的联系*/
  42. struct pid_link pids[PIDTYPE_MAX];
  43. struct list_head thread_group;
  44. struct completion *vfork_done; /* 用于vfork() */
  45. int __user *set_child_tid; /* CLONE_CHILD_SETTID */
  46. int __user *clear_child_tid; /* CLONE_CHILD_CLEARTID */
  47. unsigned long rt_priority;
  48. cputime_t utime, stime, utimescaled, stimescaled;;
  49. unsigned long nvcsw, nivcsw; /* 上下文切换计数 */
  50. struct timespec start_time; /* 单调时间 */
  51. struct timespec real_start_time; /* 启动以来的时间 */
  52. unsigned long min_flt, maj_flt;
  53. cputime_t it_prof_expires, it_virt_expires;
  54. unsigned long long it_sched_expires;
  55. struct list_head cpu_timers[3];
  56. /* 进程身份凭据 */
  57. uid_t uid,euid,suid,fsuid;
  58. gid_t gid,egid,sgid,fsgid;
  59. struct group_info *group_info;
  60. kernel_cap_t cap_effective, cap_inheritable, cap_permitted;
  61. unsigned keep_capabilities:1;
  62. struct user_struct *user;
  63. char comm[TASK_COMM_LEN]; /* 去除路径后的可执行文件名称*/
  64. /* 文件系统信息 */
  65. int link_count, total_link_count;
  66. /* ipc stuff */
  67. struct sysv_sem sysvsem;
  68. /* 当前进程特定的cpu信息 */
  69. struct thread_struct thread;
  70. /* filesystem information */
  71. struct fs_struct *fs;
  72. /* open file information */
  73. struct files_struct *files;
  74. /* namespace */
  75. struct nsproxy *nsproxy;
  76. /* signal handlers */
  77. struct signal_struct *signal;
  78. struct sighand_struct *sighand;
  79. sigset_t blocked, real_blocked;
  80. sigset_t saved_sigmask; /* To be restored with TIF_RESTORE_SIGMASK */
  81. struct sigpending pending;
  82. unsigned long sas_ss_sp;
  83. size_t sas_ss_size;
  84. int (*notifier)(void *priv);
  85. void *notifier_data;
  86. sigset_t *notifier_mask;
  87. #ifdef CONFIG_SECURITY
  88. v   oid *security;
  89. #endif
  90. /* 线程组跟踪 */
  91. u32 parent_exec_id;
  92. u32 self_exec_id;
  93. /* 日志文件系统信息 */
  94. void *journal_info;
  95. /* 虚拟内存状态 */
  96. struct reclaim_state *reclaim_state;
  97. struct backing_dev_info *backing_dev_info;
  98. struct io_context *io_context;
  99. unsigned long ptrace_message;
  100. siginfo_t *last_siginfo; /* For ptrace use. */
  101. ...
  102. };

atomic_t usage; 有几个进程正在使用此结构

时间: 2024-12-15 01:34:30

[Linux]进程(十二)--task_struct结构体的相关文章

Linux进程管理之task_struct结构体

内核源码:Linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 进程是处于执行期的程序以及它所管理的资源(如打开的文件.挂起的信号.进程状态.地址空间等等)的总称.注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源. Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息.它定义在linux-2.6.38.8/include/linux/sched.h文件中. 本文将尽

Linux进程描述符task_struct结构体详解--Linux进程的管理与调度(一)【转】

Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息.它定义在include/linux/sched.h文件中. 谈到task_struct结构体,可以说她是linux内核源码中最复杂的一个结构体了,成员之多,占用内存之大. 进程状态 /* * Task state bitmask. NOTE! These bits are also * encoded in fs/proc/array.c: get_task_state().

进程调度算法与task_struct结构体

进程是实现多个程序并发执行,以提高资源利用率和系统吞吐量. 进程两个基本属性:1.进程是一个可拥有资源的独立单元.2.进程是一个课独立调度和分派的基本单元. 进程调度是操作系统中必不可少的一种调度. 一.进程调度的任务 (1)保存处理机的现场信息.如程序技术器.多个通用寄存器中的内容等. (2)按算法选择进程 (3)把处理器分配给进程 二.进程调度机制 (1)排队器.将系统中的所有就绪进程按照一定的策略排成一个或多个队列. (2)分派器.负责将选定的进程从就绪队列中取出. (3)上下文切换器.进

C和指针 第十二章 结构体 整体赋值 error: expected expression

定义结构体后整体赋值时发生错误 typedef struct NODE { struct NODE *fwd; struct NODE *bwd; int value; } Node; //声明变量 Node first; first = {NULL, &second, 4}; 错误: error: expected expression 之所以不行是,{}内容被当做语句块了,c语言允许直接对结构体初始化,或者在赋值的时候加上类型说明,或者是逐一赋值. 初始化赋值: typedef struct

C和指针 第十二章 结构体 习题

12.3 重新编写12.7,使用头和尾指针分别以一个单独的指针传递给函数,而不是作为一个节点的一部分 #include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 //指针fwd指向前一个节点,bwd指向后一个节点 typedef struct NODE { struct NODE *fwd; struct NODE *bwd; int value; } Node; /*传入指向 头部和尾部节点的指针 的

task_struct结构体字段介绍--Linux中的PCB

task_struct结构体 字段介绍 Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程, task_struct是Linux中的[进程控制块PCB结构]的具体数据结构 这个结构体包含了一个进程所需的所有信息.它定义在linux-2.6.38.8/include/linux/sched.h文件中. 下面对task_struct这个结构体 进行各个字段的详细介绍 1. 调度数据成员(1) volatile long states;表示进程的当前状态:? TASK_RU

进程控制块的task_struct结构

>进程控制块 在linux中进程信息存放在叫做进程控制块的数据结构中,每个进程在内核中都有?个进程控制块(PCB)来维护进程相关的信息,Linux内核的 进程控制块是task_struct结构体.在Linux中,这个结构叫做task_struct.      task_struct是Linux内核的一种数据结构,它会被装载到RAM?并且包含着进程的信息. 每个进程都把它的信息放在 task_struct 这个数据结构?, task_struct 包含了这些内容: >>>>&g

Linux中表示“时间”的结构体和相关函数

转载于:http://blog.chinaunix.net/uid-25909722-id-2827364.html Linux中表示“时间”的结构体和相关函数 2011-09-13 17:01:13 分类: C/C++ 在Linux系统中,表示“时间”概念的结构体有多个,相关的时间处理函数也有很多,给人以很混乱的感觉.导致了当我们真正要使用这些结构体和函数的时候,却不知道到底该用哪个结构体和哪些函数.有必要加以归纳总结一下.通过查看头文件/usr/include/time.h 和 /usr/i

PCB之task_struct结构体

 task_struct结构描述  1. 进程状态(State) 进程执行时,它会根据具体情况改变状态 .进程状态是调度和对换的依据.Linux中的进程主要有如下状态,如表4.1所示. 内核表示 含义 TASK_RUNNING 可运行 TASK_INTERRUPTIBLE 可中断的等待状态 TASK_UNINTERRUPTIBLE 不可中断的等待状态 TASK_ZOMBIE 僵死 TASK_STOPPED 暂停 TASK_SWAPPING 换入/换出 表4.1          Linux进程的

C语言--&gt;(十四)结构体、宏、编译

知识点: 1.结构体 struct 2.typedef关键字 3.宏的定义 4.宏与函数的区别 5.文件包含和多文件编译 6.条件编译 ===========================结构体 思考:如果现在希望保存一个学生的信息,姓名,身高,年龄,地址,该如何保存 char name[64]; float height; int age; char addr[64]; 1.什么是结构体 struct 结构体指的是一种数据结构,是c语言中复合数据类型的一 种多种不同数据类型的集合 2.结构体