如何使用 execlp() 查找 pid?

How to find pid using execlp()?

getpid() 给我一个进程的 PID。但现在我想使用 execlp() 命令查找 PID 并打印 PID。但我无法解决它。帮助。

#include <stdio.h>     //my code so far
#include <unistd.h>
#include <sys/types.h>
int main()
{
   execlp("/usr/include","/usr/include",getpid(),(char *)0);
}

我认为您在设计中遗漏了一个步骤。您正在尝试使用 execlp() 来调用库函数 getpid(),但这是行不通的。如果你需要通过调用execlp()获取进程的PID那么你需要一个程序来调用。

因此,首先创建一个打印其 PID 的简单程序:

#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
   printf( "%s %d\n", argv[1], getpid()) ;
}

调用此 printpid.c 并将其编译为名为 printpid 的可执行文件。然后你可以有一个程序来做这个:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
   pid_t pid = fork() ;
   if ( pid == 0 )
   {
      execlp("./printpid", "printpid", "child", (char *)0) ;
   } else {
      execlp("./printpid", "printpid", "parent", (char *)0) ;
   }

   return 0 ;
}

将其编译为一个名为 forkprocess say 的可执行文件,并确保它和 printpid 程序位于同一目录中。当您 运行 forkprocess 时,它 运行s printpid 两次并且 printpid 显示进程的 PID。为了弄清楚发生了什么,我将一个参数传递给 printpid 以显示它是从父进程调用的还是通过调用 fork().

创建的子进程调用的