TODOPIC
Lenguajes de programación para PC => C, C#, C++ => Mensaje iniciado por: migsantiago en 02 de Marzo de 2014, 01:32:04
-
Hola!
Estoy escribiendo un programa que corre algunos hilos que monitorean la conexión de una USB y otras cosas. Cuando la USB está montada, necesito correr una aplicación en Linux y dejarla corriendo por su cuenta.
Esto es fácil de hacer a través de system(), pero el problema con system es que me bloquea el hilo hasta que la aplicación que llamé termine. No quiero esperar a la aplicación, ella y mi programa deberán correr en paralelo. La aplicación es el reproductor VLC.
system("vlc /mnt/usb");
Estuve leyendo y parece que puedo lograrlo con un simple fork(), pero sólo lo he usado en código sin hilos, donde sólo habrá un proceso padre y el hijo. Ahora, si corro un fork() desde mi proceso con varios hilos... ¿se clonan también los hilos? No me importaría usar el fork, pero si me clona los hilos, no funcionaría bien mi programa.
¿Me pueden dar alguna pista con esto? :undecided:
Edito: Me faltó preguntar también si puedo obtener el PID del VLC para después matarlo cuando ya no me haga falta.
Gracias :)
-
Seguí buscando y encontré la forma. Basta con poner un ampersand al final del comando para que bash corra el proceso y system no se bloquee. El proceso se queda corriendo por su cuenta.
system("vlc /mnt/usb --random &");
Y bueno, para matar al proceso usé fuser, pidiendo que mate a cualquiera que esté usando la ruta montada.
system("fuser -km /mnt/usb");
:mrgreen:
-
con pidof también puedes averiguar el PID de un proceso conocido
-
con pidof también puedes averiguar el PID de un proceso conocido
Gracias Pedro :)
-
Con la funcion exec() haces esto. Lo que hace es "mutar" a tu proceso en uno nuevo. Te dejo unos ejemplos:
http://cortesfernando.blogspot.com.ar/2011/11/procesos-linux-exec-y-fork.html
http://man7.org/linux/man-pages/man3/exec.3.html
Saludos!!
-
Con la funcion exec() haces esto. Lo que hace es "mutar" a tu proceso en uno nuevo. Te dejo unos ejemplos:
http://cortesfernando.blogspot.com.ar/2011/11/procesos-linux-exec-y-fork.html
http://man7.org/linux/man-pages/man3/exec.3.html
Saludos!!
Oye Gera, y de lo que preguntaba arriba, si clono un proceso, ¿se clonan todos sus hilos?
-
Lo que tendrías que hacer es usar un fork(), en ese caso vas a tener dos instancias idénticas de tu proceso. Podrías conservar uno de ellos como está (el padre), y si te interesa podés terminar sus hilos
http://www.thegeekstuff.com/2012/04/terminate-c-thread/
y el proceso hijo puede mutar al VLC con exec.
Saludos!!
-
Lo que tendrías que hacer es usar un fork(), en ese caso vas a tener dos instancias idénticas de tu proceso. Podrías conservar uno de ellos como está (el padre), y si te interesa podés terminar sus hilos
http://www.thegeekstuff.com/2012/04/terminate-c-thread/
y el proceso hijo puede mutar al VLC con exec.
Saludos!!
Interesante, gracias Gera.
-
Espero que te sirva. Suerte!!