头歌--第1关:获取进程常见属性
创始人
2025-01-16 18:03:29
0

任务描述

Linux 环境下,进程是一个十分重要的概念。每个进程都由一个唯一的标识符来表示,即进程ID,通常称为pid。本关将介绍如何获取进程的pid

本关任务:学会使用C语言在Linux系统中获取进程的pid以及父进程的pid

相关知识

Linux系统中存在一个特殊的进程,即空闲进程(idle process),当没有其他进程在运行时,内核所运行的进程就是空闲进程,它的pid0。在启动后,内核运行的第一个进程称为init进程,它的pid1。通常,Linux系统中init进程就是我们在资源管理器中看到的名为init的程序。系统中其它的进程都是由init来创建出来的。

创建新进程的那个进程被称为父进程,而新创建的进程被称为子进程。每个进程都是由其他进程创建的(除了init进程),因此每个子进程都有一个父进程。

Linux系统提供了两个系统调用函数来获取一个进程的pid和其父进程的pid,分别是getpidgetppid函数。在Linux系统中可以使用man命令来查询这些函数的使用方法。具体的查询命令为: man 2 函数名

获取进程自身pid

获取进程本身的进程ID的系统调用函数是getpid,具体的说明如下:

  • 需要的头文件如下:

    1. #include
    2. #include
  • 函数格式如下: pid_t getpid(void);

  • 函数返回值说明: 返回当前进程的pid值。

案例演示1: 编写一个程序,打印自身的进程ID。详细代码如下所示:

  1. #include
  2. #include
  3. #include
  4. int main()
  5. {
    1. pid_t pid = getpid();
    2. printf("当前进程的ID为:%d\n", pid);
    3. return 0;
  6. }

将以上代码保存为getpid.c文件,编译执行。可以看到每次运行都打印出不同的进程ID,这是因为Linux系统动态的给进程分配pid

获取父进程pid

获取父进程的进程ID的系统调用函数是getppid,具体的说明如下:

  • 需要的头文件如下:

     
    1. #include
    2. #include
  • 函数格式如下: pid_t getppid(void);

  • 函数返回值说明: 返回当前进程的父进程的pid值。

案例演示1: 编写一个程序,打印父进程ID和自身进程ID。详细代码如下所示:

 
  1. #include
  2. #include
  3. #include
  4. int main()
  5. {
  6. pid_t pid = getpid();
  7. printf("当前进程的ID为:%d\n", pid);
  8. pid_t ppid = getppid();
  9. printf("当前进程的父进程ID为:%d\n", ppid);
  10. return 0;
  11. }

将以上代码保存为getppid.c文件,编译执行。可以看到每次运行都打印出相同的父进程ID,这是因为我们在同一个终端中运行3次程序,所以被运行的程序父进程为终端进程,因为父进程一直都一样。

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 补全getProcInfo函数,用于获取当前进程ID和其父进程ID(提示:将结果存放在procIDInfo结构体中)。
#include  #include  #include   // int main() // { //     pid_t pid=getpid(); //     printf("当前进程的ID为:%d\n",pid); //     pid_t ppid=getppid(); //     printf("当前进程的父进程ID为:%d\n",ppid); //     return 0; // } /**********************  * pid: 当前进程ID  * ppid: 父进程ID ***********************/ struct procIDInfo { 	pid_t pid; 	pid_t ppid; };  // /************************ //  * 返回值: 需要被打开的目录路径 // *************************/ struct procIDInfo getProcInfo() { 	struct procIDInfo ret;   //存放进程ID信息,并返回 	/********** BEGIN **********/ 	ret.pid= getpid();     ret.ppid=getppid(); 	 	/********** END **********/  	return ret; } 

 第二关链接:https://blog.csdn.net/Zjyzzy123456789/article/details/130045820?spm=1001.2014.3001.5501

相关内容

热门资讯

玩家必看科普!胡莱三国辅助工具... 玩家必看科普!胡莱三国辅助工具(辅助挂)果然有开挂辅助脚本(有挂教学)暗藏猫腻,小编详细说明胡莱三国...
揭秘一下!丰县14张脚本(辅助... 揭秘一下!丰县14张脚本(辅助挂)一向有开挂辅助黑科技(有挂分享)是一款可以让一直输的玩家,快速成为...
发现一款!微乐小程序修复系统有... 您好,微乐小程序修复系统有用吗这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很...
揭秘一下!aapoker怎么开... 揭秘一下!aapoker怎么开辅助器,pokermaster脚本(透视)固有有开挂辅助神器(有开挂工...
一分钟了解!河洛杠次脚本入口在... 一分钟了解!河洛杠次脚本入口在哪(辅助挂)果然有开挂辅助工具(有挂存在);一、河洛杠次脚本入口在哪A...
让我来分享经验!创思维辅助软件... 让我来分享经验!创思维辅助软件(辅助挂)先前有开挂辅助插件(有挂教学)是一款可以让一直输的玩家,快速...
发现一款!微乐麻将脚本掌上程序... 发现一款!微乐麻将脚本掌上程序,雀姬辅助器,细节揭秘(有挂方式);发现一款!微乐麻将脚本掌上程序,雀...
推荐一款!佛手在线有挂吗,德州... 推荐一款!佛手在线有挂吗,德州透视是真的假的(透视)切实有开挂辅助软件(有开挂攻略)是一款可以让一直...
科技介绍!越乡游辅助工具(辅助... 科技介绍!越乡游辅助工具(辅助挂)果然有开挂辅助脚本(有挂解密)科技介绍!越乡游辅助工具(辅助挂)果...
普及知识!拱趴大菠萝修改器(辅... 普及知识!拱趴大菠萝修改器(辅助挂)原本有开挂辅助神器(有挂教学),拱趴大菠萝修改器是用手机号来登录...