Execlp висит после исполнения

Я вызываю внешний бинарный файл (Webots Simulator) в моей программе cpp, позвонив fork() а также execlp(), который принимает аргумент, который является путем к определенному файлу. Нет проблем, когда путь к файлу действителен и файл существует, однако, когда я указываю на неверный файл, я получаю ожидаемый Could not open file: 'file.wbt' но дочерний процесс не завершается. Я думаю, что это может быть связано с внутренним кодом Webot и тем, как он обрабатывает такие ошибки, однако, если я позвоню webots file.wbt в системной оболочке bash выдается такая же ошибка но процесс заканчивается как надо.

Компилируемый раздел моей программы:

#include <iostream>
#include <fstream>
#include <stdio.h>

#include <sys/types.h>
#include <signal.h>

int start_webots(const char* world){
//starting webots as a child process with known PID
int pid = fork();
if (pid == 0){
printf("Starting Webots...");
execlp("/usr/bin/webots","webots",world,NULL);
printf("Finished executing Webots");
exit(1);
}
else printf("Webots PID: %i\n", pid);
return pid;
}

int main(int argc, char const *argv[]){
int pid=start_webots("/home/joao/Work/ASBG/code/cpp/darwin/worlds/darwin_cpgs_noise.webt");

if (kill(pid,0)) printf("NO PROCESS RUNNING\n");
return 0;
}

Строки кода после execlp, естественно, никогда не выполняются до тех пор, пока существует двоичный файл (установлен веб-бот), поскольку веб-бот заменяет дочерний процесс. Однако после ошибки Could not open (...) Я не получаю выход stdout, программа зависает, и я получаю процессы webots работает в фоновом режиме.

Что именно я делаю не так / как я могу найти обходной путь или решение?

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]