Tengo un programa C ++ que, según la entrada del usuario, necesita iniciar y detener un programa Linux determinado.
He simplificado la lógica que estoy usando actualmente en el siguiente código:
int pid = fork(); if (pid == -1) { //Handle error } else if (pid == 0) { execlp("my_program", nullptr); exit(0); } else { //Main program stuff if(/* user selects close "my_program"*/) { kill(pid, SIGTERM); } //Other main program stuff }Todo está funcionando, pero me preguntaba si había otros enfoques, tal vez más en el estilo moderno de C++, que podrían usarse en esta situación.
Gracias por adelantado.
Echa un vistazo a boost::process.
Hay varias formas en que se puede generar un proceso. Por ejemplo, en su ejemplo, bifurca el proceso, pero no cierra los descriptores de archivos clonados en el proceso secundario. Esa es una práctica a menudo olvidada por aquellos que invocan la bifurcación y puede conducir a problemas de enlace con el puerto (puerto/dirección ya en uso) u otros problemas difíciles de depurar.
Incluso boost no lo hizo correctamente durante algún tiempo.
La forma moderna sería usar una biblioteca como Boost.Process https://www.boost.org/doc/libs/1_78_0/doc/html/process.html o Qt https://doc.qt.io/qt- 5/qprocess.html .