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()
创建的子进程调用的。