如何使用 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()
.
创建的子进程调用的
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()
.