Как найти pid с помощью execlp ()? - PullRequest
0 голосов
/ 27 марта 2019

getpid () дает мне PID процесса. Но теперь я хочу найти PID с помощью команды execlp (), а также распечатать 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);
}

1 Ответ

0 голосов
/ 27 марта 2019

Я думаю, что вы пропустили шаг в своем дизайне.Вы пытаетесь использовать 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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...