`
tcspecial
  • 浏览: 911640 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Linux 下获取进程PID

阅读更多

      Linux查询pid有多种方式,可通过遍历/proc目录下进程运行信息及shell ps命令

 

1. 遍历/proc目录

    Linux下每个运行的进程都会在/proc目录下建立该进程pid目录,/proc/pid 目录下有 status, cmdline等描述进程运行参数,状态等信息. 运行可能没有命令行参数,cmdline文件可能为空. 我们选择 status 文件,比较 status 中 Name 字段即可

    

// 根据进程名称查找pid
pid_t GetPidByName(const char *pName)
{
 DIR *pdir = NULL;
 struct dirent *pde = NULL;
 
 FILE *pf = NULL;
 char buff[128];
 pid_t pid;
 char szName[128];
 
 // 遍历/proc目录下所有pid目录
 pdir = opendir("/proc");
 if (!pdir)
 {
  perror("open /proc fail.\n");
  return -1;
 }
 
 while ((pde = readdir(pdir)))
 {
  if ((pde->d_name[0] < '0')|| (pde->d_name[0] > '9'))
  {
   continue;
  }
  
  // 读取 /proc/$pid/status文件
  sprintf(buff, "/proc/%s/status", pde->d_name);
  pf = fopen(buff, "r");
  if (pf)
  {
   fgets(buff,sizeof(buff),pf);
   fclose(pf);
   
   sscanf(buff,"%*s %s",szName); // 跳过Name:字段,获取进程名称
   pid=atoi(pde->d_name);
   
   if(strcmp(szName,pName)==0)
   {
    closedir(pdir);
    return pid;
   }
  }
 }
 
 closedir(pdir);
 return 0;
}

 

二. ps 命令

     进程名截断

 

    ps

    通过上述截图发现,如果进程名称过长,会被截断,这种情况下无法通过status匹配进程名称,而ps命令却完美解决上述问题,可以通过管道接收shell执行结果

    

int FindPidByName(const char *pName)
{
	int szPid=-1;

	char szProQuery[256];
	sprintf(szProQuery,"ps -ef|grep '%s'|grep -v 'grep'|awk '{print $2}'",pName);  // 打开管道,执行shell命令

	FILE *fp=popen(szProQuery,"r");
	char szBuff[10];

	while(fgets(szBuff,10,fp)!=NULL) // 逐行读取执行结果
	{
		szPid=atoi(szBuff);
		break;
	}

	pclose(fp); // 关闭管道指针,不是fclose()很容易混淆
	return szPid;
}

 

  • 大小: 9.8 KB
  • 大小: 13.1 KB
  • 大小: 11.2 KB
分享到:
评论

相关推荐

    linux根据pid获取进程名和获取进程pid(c语言获取pid)

    本文将详细介绍如何利用C语言来实现根据进程ID(PID)获取进程名以及根据进程名获取PID的功能。这些功能在需要监控或控制特定进程时非常有用。 首先,我们了解Linux中与进程相关的几个关键概念: 1. **/proc** ...

    通过PID获取进程路径

    在压缩包文件中的"根据进程PID获取全路径"可能是实现这个功能的源代码文件,包含了具体的实现细节。如果需要深入学习和理解,你可以查阅这个文件,查看如何将上述理论知识转化为实际的代码实现。 总之,通过PID获取...

    Linux下c++杀掉对应进程

    Linux下使用c++通过管道获取进程pid,杀掉进程

    QT 获取 进程名、PID、CPU时间、内存、用户对象、GDI对象,获取盘符的容量和监控硬盘的插拔

    在Linux系统中,可以通过读取`/proc/&lt;pid&gt;/stat`文件获取进程的CPU时间。而在Windows上,可以使用`GetProcessTimes` API函数。在QT中,这通常需要封装为自定义的C++函数,然后调用相应的系统API。 3. **内存信息**...

    获取进程ID_获取进程ID

    在不同的操作系统中,如Windows、Linux或Unix系统,获取进程ID的方法有所不同。下面我们将详细探讨如何在这些系统中获取进程ID。 在Windows系统中,可以使用以下方法获取进程ID: 1. **任务管理器**:打开任务管理...

    根据进程ID获取进程的内存使用量,CPU使用率,线程个数据信息

    在Linux中,`/proc/&lt;pid&gt;/task`目录下包含了进程的所有线程,子目录的数量就是线程个数。 了解了这些基本概念和方法后,我们可以编写程序来获取这些信息。例如,可以创建一个名为`GetSysInfo`的工具,它接受进程ID...

    获取进程模块、pid(参数处理较前有一定优化)

    另外,编程语言如Python、C++、Java等也提供了API来获取进程PID,例如Python的os模块中的os.getpid()函数。 模块则与进程密切相关,它们是组成进程可执行代码和数据的单元。这些模块可能包括动态链接库(DLLs)或...

    java获取各进程的信息

    - 如果获取进程信息时出现异常,则忽略该进程并继续处理下一个进程。 4. **定时更新** - 通过`Thread.sleep(SLEEP_TIME);`使线程休眠一段时间后再次执行整个过程,从而实现数据的定时刷新。 #### 总结 本示例...

    linux实验四 进程控制实验

    通过`getpid()`获取当前进程的PID,通过`getppid()`获取当前进程的父进程PID。 7. **进程控制实验内容详解**: - 实验一:创建两个子进程,通过`fork()`系统调用,使得系统中存在一个父进程和两个子进程。由于进程...

    linux 下的进程

    在本章节中,我们将深入探讨进程的一些基本操作,包括查看进程、获取进程ID、查看活动进程等。 ##### 2.1 查看进程 即使在没有明显用户交互的情况下,Linux系统内部也会有许多进程在运行。我们可以通过简单的命令...

    linux下进程管理实验

    通过学习和实践Linux下的进程管理,我们可以深入理解操作系统如何管理和调度进程,以及父子进程之间的关系。本实验重点在于使用`fork()`系统调用来创建新的进程,并通过`getpid()`获取不同进程的ID来区分它们。 1. ...

    linux shell 根据进程名获取pid的实现方法

    1. **交互式Bash Shell获取进程PID** 在交互式Bash Shell中,我们可以使用`ps`命令配合`grep`和`awk`来查找特定进程的PID。以下是一些常用的命令组合: - 使用`ps -ef`和`grep`及`grep -v`过滤掉grep自身: ```...

    Linux下的多进程编程初步

    ### Linux下的多进程编程初步 #### 摘要 多线程程序设计的概念自六十年代初被提出以来,直到八十年代中期才在Unix系统中正式引入多线程机制。随着时间的发展,多线程编程因其高效性及灵活性在软件开发领域占据了...

    利用Perl实现Linux下隐藏进程的查找.pdf

    ### 利用Perl实现Linux下隐藏进程的查找 #### 概述 随着Linux操作系统的广泛应用,特别是因其稳定性、高效性及灵活性,在服务器市场占据了一席之地。Linux内核的可装载模块(Loadable Kernel Modules,简称LKM)是...

    Linux下login进程源码分析

    ### Linux下login进程源码分析 #### 前言 在深入探讨`login`进程的源码之前,我们首先理解其在Linux系统中的角色。`login`程序是用户登录过程中的核心组件,负责验证用户身份并初始化用户环境。当用户在终端或图形...

    Linux进程控制编程-获取进程ID实例.pdf

    本篇文章将深入探讨如何在Linux环境中获取进程ID,并通过实例程序进行说明。 获取进程ID主要通过`getpid()`函数实现。这个函数是C标准库中的一个函数,定义在`&lt;unistd.h&gt;`头文件中。`getpid()`函数的作用是返回调用...

    Linux下进程管理

    ### Linux下的进程管理知识点 #### 一、进程的概念 在Linux操作系统中,进程是程序的一次执行过程。每个进程都有其独特的标识符——进程ID(PID)。进程具有生命周期,从创建到终止,这一过程中,进程可能会处于...

    获取进程信息类,监控进程变化线程

    在Windows系统中,我们可以使用`CreateToolhelp32Snapshot`、`Process32First`和`Process32Next`等函数来遍历所有进程,获取进程的PID(进程标识符)、内存使用情况、所属用户等。而在Linux系统中,可以通过读取`/...

Global site tag (gtag.js) - Google Analytics