Когда я использую fork для создания нового дочернего процесса, а затем вызываю execlp syscall для запуска новой программы в дочернем процессе. Идентификаторы процесса, которые я получаю в дочернем процессе после execlp и я получаю из системного вызова waitpid после завершения дочернего процесса, отличаются.
Например, getpid () возвращает 7103 в дочернем элементе, а waitpid возвращает 7101 в родительском.
Полагаю, что-то происходит после запуска execlp. Может кто-нибудь объяснить это. Спасибо.
Кстати, я запускаю свой код на Fedora.
Вот код:
/ * родитель программы * /
if ((pid = fork()) < 0){
perror("fork failed");
exit(2);
}
if (pid == 0){
// child
execlp("xterm", "xterm", "-e", "./echo_cli", "127.0.0.1", (char *)0);
exit(0);
}
/* ... */
// sig_chld handles SIGCHLD singal
void sig_chld(int signo){
pid_t pid;
int stat;
while ((pid = waitpid(-1, &stat, WNOHANG)) > 0){
printf("Child %d terminated\n", pid);
}
return ;
}
/ * программа echo_cli * /
pid = getpid();