Я думаю, что вы пропустили шаг в своем дизайне.Вы пытаетесь использовать execlp()
для вызова библиотечной функции getpid()
, и это просто не будет работать.Если вам нужно получить PID процесса через вызов execlp()
, вам нужна программа для вызова.
Итак, начните с создания простой программы, которая печатает свой 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, и убедитесь, что она и программа printpid находятся в одном каталоге.Когда вы запускаете forkprocess, он запускает printpid дважды, а printpid отображает PID процесса.Чтобы прояснить, что происходит, я передаю параметр в printpid, чтобы показать, вызывается ли он из родительского процесса или дочернего процесса, созданного путем вызова fork()
.