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 命令
通过上述截图发现,如果进程名称过长,会被截断,这种情况下无法通过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; }
相关推荐
本文将详细介绍如何利用C语言来实现根据进程ID(PID)获取进程名以及根据进程名获取PID的功能。这些功能在需要监控或控制特定进程时非常有用。 首先,我们了解Linux中与进程相关的几个关键概念: 1. **/proc** ...
在压缩包文件中的"根据进程PID获取全路径"可能是实现这个功能的源代码文件,包含了具体的实现细节。如果需要深入学习和理解,你可以查阅这个文件,查看如何将上述理论知识转化为实际的代码实现。 总之,通过PID获取...
Linux下使用c++通过管道获取进程pid,杀掉进程
在Linux系统中,可以通过读取`/proc/<pid>/stat`文件获取进程的CPU时间。而在Windows上,可以使用`GetProcessTimes` API函数。在QT中,这通常需要封装为自定义的C++函数,然后调用相应的系统API。 3. **内存信息**...
在不同的操作系统中,如Windows、Linux或Unix系统,获取进程ID的方法有所不同。下面我们将详细探讨如何在这些系统中获取进程ID。 在Windows系统中,可以使用以下方法获取进程ID: 1. **任务管理器**:打开任务管理...
在Linux中,`/proc/<pid>/task`目录下包含了进程的所有线程,子目录的数量就是线程个数。 了解了这些基本概念和方法后,我们可以编写程序来获取这些信息。例如,可以创建一个名为`GetSysInfo`的工具,它接受进程ID...
另外,编程语言如Python、C++、Java等也提供了API来获取进程PID,例如Python的os模块中的os.getpid()函数。 模块则与进程密切相关,它们是组成进程可执行代码和数据的单元。这些模块可能包括动态链接库(DLLs)或...
- 如果获取进程信息时出现异常,则忽略该进程并继续处理下一个进程。 4. **定时更新** - 通过`Thread.sleep(SLEEP_TIME);`使线程休眠一段时间后再次执行整个过程,从而实现数据的定时刷新。 #### 总结 本示例...
通过`getpid()`获取当前进程的PID,通过`getppid()`获取当前进程的父进程PID。 7. **进程控制实验内容详解**: - 实验一:创建两个子进程,通过`fork()`系统调用,使得系统中存在一个父进程和两个子进程。由于进程...
在本章节中,我们将深入探讨进程的一些基本操作,包括查看进程、获取进程ID、查看活动进程等。 ##### 2.1 查看进程 即使在没有明显用户交互的情况下,Linux系统内部也会有许多进程在运行。我们可以通过简单的命令...
通过学习和实践Linux下的进程管理,我们可以深入理解操作系统如何管理和调度进程,以及父子进程之间的关系。本实验重点在于使用`fork()`系统调用来创建新的进程,并通过`getpid()`获取不同进程的ID来区分它们。 1. ...
1. **交互式Bash Shell获取进程PID** 在交互式Bash Shell中,我们可以使用`ps`命令配合`grep`和`awk`来查找特定进程的PID。以下是一些常用的命令组合: - 使用`ps -ef`和`grep`及`grep -v`过滤掉grep自身: ```...
### Linux下的多进程编程初步 #### 摘要 多线程程序设计的概念自六十年代初被提出以来,直到八十年代中期才在Unix系统中正式引入多线程机制。随着时间的发展,多线程编程因其高效性及灵活性在软件开发领域占据了...
### 利用Perl实现Linux下隐藏进程的查找 #### 概述 随着Linux操作系统的广泛应用,特别是因其稳定性、高效性及灵活性,在服务器市场占据了一席之地。Linux内核的可装载模块(Loadable Kernel Modules,简称LKM)是...
### Linux下login进程源码分析 #### 前言 在深入探讨`login`进程的源码之前,我们首先理解其在Linux系统中的角色。`login`程序是用户登录过程中的核心组件,负责验证用户身份并初始化用户环境。当用户在终端或图形...
本篇文章将深入探讨如何在Linux环境中获取进程ID,并通过实例程序进行说明。 获取进程ID主要通过`getpid()`函数实现。这个函数是C标准库中的一个函数,定义在`<unistd.h>`头文件中。`getpid()`函数的作用是返回调用...
### Linux下的进程管理知识点 #### 一、进程的概念 在Linux操作系统中,进程是程序的一次执行过程。每个进程都有其独特的标识符——进程ID(PID)。进程具有生命周期,从创建到终止,这一过程中,进程可能会处于...
在Windows系统中,我们可以使用`CreateToolhelp32Snapshot`、`Process32First`和`Process32Next`等函数来遍历所有进程,获取进程的PID(进程标识符)、内存使用情况、所属用户等。而在Linux系统中,可以通过读取`/...