Сначала я покажу вам небольшой псевдокод:
cpid = forkpty (&compipe, NULL, NULL, NULL);
//yes i have some error handling here, but its not important yet
if (cpid == 0) //child process
{
//here are some pipes closed,
//and the forked child will exec(ute) third party process
}
else //parent process
{
//here are just closing some other pipe ends,
//and settings up some fcntl flags like O_NONBLOCK
if (string (execResult) == "fail")
{
//HERE ARE THE PROBLEM!!
//This debug message will print to the pseudo-terminal (i think)
//because it is not visible in "main"-terminal / console
gui -> appendDbg (Output::EROR, "Could not execute FOO");
printDbg (EROR, "Could not execute FOO");
}
else
{
//But I don't understand why this debug message prints to
//the "main"-terminal where the application was started from
printDbg (INFO, "Starting child process: 'FOO' with PID: " +to_string (cpid));
printChildsOut();
}
}
Хорошо, моя проблема описана в части if-else, где будет проверен результат выполнения.
Дело в том, что я не вижу своего сообщения отладки под названием «EROR …», но я вижу сообщение отладки информации под названием «INFO …» в моем «главном» терминале, откуда было запущено приложение.
Кстати, функция ‘printDbg’ разработана мной и просто печатает сообщения через ‘cout’.
Задача ещё не решена.
Других решений пока нет …