C语言怎么获取进程ID 代码实例
更新时间:2023-10-07获取进程ID
进程ID,也被称作PID,是操作系统中用于标识进程的唯一数字标识符。在C语言中,我们可以使用标准库中的函数来获取程序自身的PID,也可以使用操作系统提供的工具,以及第三方库来获取其他进程的PID。下面将详细地介绍如何在C语言中获取进程ID。
使用getpid()函数获取程序自身的PID
在Linux、Unix及POSIX标准操作系统中,我们可以使用标准库中的getpid()函数来获取自身进程的PID,其函数原型如下:
#include <sys/types.h> #include <unistd.h> pid_t getpid(void);
上面的代码中,通过#include语句引入了sys/types.h和unistd.h两个头文件。其中,unistd.h提供了getpid()函数的定义。该函数返回当前进程的PID,其数据类型为pid_t。下面是一个示例代码:
#include <stdio.h> #include <unistd.h> int main() { pid_t pid=getpid(); printf("process id: %d\n", pid); return 0; }
在上面的代码中,我们首先使用了#include语句来引入了stdio.h和unistd.h两个头文件,接着定义了一个主函数。在主函数中,我们通过getpid()函数获取自身进程的PID,并将其打印到控制台上。
使用ps命令获取其他进程的PID
在Linux、Unix等操作系统中,我们可以使用ps命令来查询当前系统内正在运行的进程信息。如果我们想要获取某个进程的PID,可以结合使用grep命令和awk命令来实现。下面是一个获取进程ID的示例代码:
ps -ef | grep <process_name> | awk '{print $2}'
上面的命令中,我们使用了ps命令来获取关于正在运行进程的详细信息,然后通过管道符将输出传递给grep命令,在其中指定进程名称,用于筛选出我们所需要的进程。最后,我们再次使用管道符将结果传递给awk命令,并在其中指定以空格为分隔符,输出进程ID所在的第二列数据。
使用第三方库获取其他进程的PID
当我们想要在程序中获取其他进程的PID时,也可以使用第三方库来实现。例如,我们可以使用libprocps库中的函数来获取正在运行进程的详细信息,其中就包含了PID信息。下面是一个使用libprocps库来获取进程ID的示例代码:
#include <stdio.h> #include <proc/readproc.h> int main() { PROCTAB* proc=openproc(PROC_FILLMEM | PROC_FILLSTAT); proc_t proc_info; while (readproc(proc, &proc_info) !=NULL) { printf("%d %s\n", proc_info.tid, proc_info.cmd); } closeproc(proc); return 0; }
在上面的代码中,我们首先使用#include语句引入了stdio.h和proc/readproc.h两个头文件,接着定义了一个主函数。在主函数中,我们首先使用openproc()函数来打开进程信息文件,并设置了所需填充的字段,然后使用readproc()函数来逐个读取所有进程的详细信息,并将获取到的PID及进程名称打印到控制台上。最后,我们使用closeproc()函数来关闭进程信息文件。