Es decir la funcion system es bloqueante, y unicamente va a avanzar de alli luego de que esta salga o se detenga. Esto quiere decir que en el mismo programa no vas a poder iniciar y detener el proceso.
Entonces no me vale para lanzar el video, solo para cancelarlo con pkill.
Cuando lanzo el video, el programa principal tiene que seguir funcionando mientras se reproduce el video. En este programa se chequean el estado de una matriz de señales que leo con varios expansores de puertos MCP23s17, y según esas señales se lanzan nuevos videos, siempre cancelando antes el que pueda estar ejecutándose.
Lo de fork-exec*, no lo entiendo muy bien todavía. Parece que el fork duplica el programa actual, osea mi programa principal, algo yo no necesito, y el exec sería el que realmente lanzaría el nuevo programa, el reproductor de video.
¿ Entonces puedo hacer un exec desde el programa principal para lanzar el reproductor de video, o es neceario el fork también ?.
Vaya lío, a ver si voy cazando conceptos:
1.-
system: ejecuta un programa externo al principal, pero no deja seguir al programa principal hasta que acabe el programa llamado. No me vale para lanzar el reproductor de video, pero si para el pkill.
2.-
Fork-exec*: fork crea un duplicado del programa actual (el principal), y desde ambos (original y copia) se puede detectar si estás en el programa padre o en el hijo, si estás en el programa hijo, con un exec* lanzaría el reproductor de video. En cualquier caso, el programa principal sigue su curso independiente del programa externo a llamar. Me vale para lanzar el reproductor de video, pero creo que no sería una buena elección para lanzar el pkill, porque el programa principal no debe de lanzar un nuevo video hasta que se cancele el que está en curso.
3.-
Popen: no se todavía como funciona. Y este es el que han utilizado en los fuentes de ejemplo en Python que he puesto, que hacen algo parecido a lo que yo quiero hacer.
exec replaces the current process with another one.
system runs another program, wait for its completion.
fork copies the current process; both the original and the copy continue from the same point.
pipe sets up a pipe between two handles.
syscall makes a low-level system call.