usar pause libreria dev como comandos comando colocar c++ c system call hang

libreria - system pause dev c++



¿Hay una manera de no esperar a que termine un comando system()?(en c) (5)

Creo que si agrega un ''&'' al final del comando funcionará. ''&'' le dice al comando que se ejecute en segundo plano

int a = system("python -m plotter &");

Similar a:
El programa no ejecuta nada después de una llamada al sistema ()

Soy bastante nuevo en el uso de C, pero básicamente quiero ejecutar la siguiente línea:

int a = system("python -m plotter");

el cual lanzaré un módulo python que desarrollé. Sin embargo, quiero que el resto de mi programa c siga ejecutándose en lugar de esperar a que el comando termine de ejecutarse (la aplicación de Python está en un bucle infinito, por lo que no se cerrará automáticamente). ¿Hay alguna manera de hacer esto usando C / C ++? Espero que esto no sea una re-publicación de una pregunta anterior, pero honestamente no sé qué calificar con este comportamiento y no encontré nada en mi búsqueda.

Actualización: la solución fue:

int a = system("start python -m plotter &");


El comando "Sistema" en Linux permitirá que el resto del código se ejecute solo cuando se haya ejecutado.

Debes usar fork () si quieres un procesamiento simultáneo.


La palabra para esto es una llamada de función / método asíncrono. C y C ++ no tienen una función de este tipo, por lo que debe llamar a la función en un subproceso independiente o usar una llamada al sistema que la ejecutará en un proceso separado. Ambos métodos tienden a ser específicos de la plataforma, aunque existen bibliotecas de subprocesos multiplataforma.

Sé que en unix para hacer esto en un proceso separado, usaría fork(2) para crear un nuevo proceso y exec (3) para ejecutar un nuevo programa en ese proceso. No sé qué llamadas de sistema serían necesarias en Windows, pero debería ser algo similar.


No hay forma en la biblioteca estándar, pero puede desembolsar o crear un subproceso separado que lo ejecutaría en segundo plano, si su sistema operativo lo admite.


system() simplemente pasa su argumento al shell (en sistemas similares a Unix, generalmente /bin/sh ).

Prueba esto:

int a = system("python -m plotter &");

Por supuesto, el valor devuelto por system() no será el estado de salida de la secuencia de comandos de python, ya que aún no habrá terminado.

Es probable que esto funcione solo en sistemas similares a Unix (probablemente incluyendo MacOS); en particular, es probable que no funcione en MS Windows, a menos que esté ejecutando bajo Cygwin.

En Windows, el system() probablemente invoca a cmd.exe , que no acepta comandos con la misma sintaxis utilizada en sistemas similares a Unix. Pero el comando de start Windows debería hacer el trabajo:

int a = system("start python -m plotter");

Mientras esté escribiendo el código específico de Windows (el start no funcionará en Unix a menos que tenga un comando de start en su $PATH ), puede considerar usar alguna función de Windows de nivel inferior, tal vez llamando a StartProcess . Eso es más complicado, pero es probable que le dé más control sobre cómo se ejecuta el proceso. Por otro lado, si system() cumple con sus requisitos, también puede utilizarlo.