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时,它运行printpid两次,printpid显示进程的PID。为了弄清楚发生了什么,我将一个参数传递给printpid,以显示它是从父进程调用的,还是从调用fork()创建的子进程调用的。

10-06 06:05