c语言编程笔录

首页 >   > 笔记大全

笔记大全

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()函数来关闭进程信息文件。