Linux内核task_struct获取进程Task的名称

在内核中,如果你已经获取到相关Task(进程)的task_struct结构,你可以通过task_struct结构中的 char comm[TASK_COMM_LEN];成员可以获取到进程的名称。

//注意 TASK_COMM_LEN 的长度是16字节
 sprintf(buffer,"%s",pTaskStruct->comm);

附上task_struct的基本信息

struct task_struct {
//这个是进程的运行时状态,-1代表不可运行,0代表可运行,>0代表已停止。
 volatile long state;
 /*
flags是进程当前的状态标志,具体的如:
0x00000002表示进程正在被创建;
0x00000004表示进程正准备退出;
0x00000040 表示此进程被fork出,但是并没有执行exec;
0x00000400表示此进程由于其他进程发送相关信号而被杀死 。
*/
 unsigned int flags;
//表示此进程的运行优先级
 unsigned int rt_priority;
//这里出现了list_head结构体,详情请参考
 struct list_head tasks;
//这里出现了mm_struct 结构体,该结构体记录了进程内存使用的相关情况,详情请参考
 struct mm_struct *mm;
/* 接下来是进程的一些状态参数*/
 int exit_state;
 int exit_code, exit_signal;
//这个是进程号
 pid_t pid;
//这个是进程组号
 pid_t tgid;
//real_parent是该进程的”亲生父亲“,不管其是否被“寄养”。
 struct task_struct *real_parent;
//parent是该进程现在的父进程,有可能是”继父“
 struct task_struct *parent;
//这里children指的是该进程孩子的链表,可以得到所有孩子的进程描述符,但是需使用list_for_each和list_entry,list_entry其实直接使用了container_of,详情请参考
 struct list_head children;
//同理,sibling该进程兄弟的链表,也就是其父亲的所有孩子的链表。用法与children相似。
 struct list_head sibling;
//这个是主线程的进程描述符,也许你会奇怪,为什么线程用进程描述符表示,因为linux并没有单独实现线程的相关结构体,只是用一个进程来代替线程,然后对其做一些特殊的处理。
 struct task_struct *group_leader;
//这个是该进程所有线程的链表。
 struct list_head thread_group;
//顾名思义,这个是该进程使用cpu时间的信息,utime是在用户态下执行的时间,stime是在内核态下执行的时间。
 cputime_t utime, stime;
//下面的是启动的时间,只是时间基准不一样。
 struct timespec start_time;
 struct timespec real_start_time;
//comm是保存该进程名字的字符数组,长度最长为15,因为TASK_COMM_LEN为16。
 char comm[TASK_COMM_LEN];
/* 文件系统信息计数*/
 int link_count, total_link_count;
/*该进程在特定CPU下的状态*/
 struct thread_struct thread;
/* 文件系统相关信息结构体*/
 struct fs_struct *fs;
/* 打开的文件相关信息结构体*/
 struct files_struct *files;
 /* 信号相关信息的句柄*/
 struct signal_struct *signal;
 struct sighand_struct *sighand;
 /*这些是松弛时间值,用来规定select()和poll()的超时时间,单位是纳秒nanoseconds */
 unsigned long timer_slack_ns;
 unsigned long default_timer_slack_ns;
};

原文:悠然品鉴 » Linux内核task_struct获取进程Task的名称
http://www.youranshare.com/push/code/lin-c-cpp/412.html

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值