Je travaille sur un projet dans lequel je dois mplayer
pour exécuter plusieurs instances afin de créer un mixage voix-off-musique en temps réel à partir de deux fichiers. Ainsi, la musique est constamment jouée à 90% du volume (représentée par "M" dans la ligne de temps suivante) et à certains moments, nous baissons le volume ("m") afin de placer la voix ("V") sur la musique, après quoi nous ramenons la musique à 90% lorsque l'échantillon de voix se termine.
CALENDRIER (minutes)
0===========1===========2===========3===========4===========...
_____________VVVVVVVV__________VVVVVVVVVVVVVV__________VVVVV...
MMMMMMMMMMMMMmmmmmmmmMMMMMMMMMMmmmmmmmmmmmmmmMMMMMMMMMMmmmmm...
Tout fonctionne très bien jusqu'à présent. Mais, pour une raison quelconque, plusieurs fois la deuxième mplayer
L'instance termine la lecture de la voix-off mais le processus reste actif et ne se termine jamais.
La réponse se trouve ici : Tuer tous les processus sauf celui qui exécute le script. ne fonctionne pas pour ce cas.
J'ai également essayé la réponse acceptée sur cette question : https://unix.stackexchange.com/questions/50555/kill-many-instances-of-a-running-process-with-one-command mais cela va tuer TOUTES les instances de mplayer
et j'ai besoin de garder le premier constamment en musique.
Dans cette page http://www.oracleflash.com/20/How-to-kill-all-processes-with-one-command-in-Linux.html ils reproduisent un moyen de tuer tous les processus initiés par une application. Ce qui est vraiment utile dans ce cas mais cela tuera aussi toutes les instances de mplayer
.
Solution attendue
J'enregistre le PID du lecteur de musique avec :
mplayer -shuffle -playlist playlist.m3u </dev/null >/dev/null 2>&1 & echo $! > player.pid
Avec ce numéro PID, j'aimerais utiliser la solution de la dernière page donnée afin de tuer tous les processus SAUF celui qui est enregistré dans le fichier player.pid. Ainsi, en plaçant cat player.pid
au milieu de
kill -9 `ps -ef | grep oraxpo | grep -v grep | awk '{print $2}'
peut faire l'affaire.
Le problème est que je ne sais pas où le placer. Ou s'il y a une façon différente/meilleure de le faire.
Une autre idée est de tuer les derniers processus un par un, mais en s'arrêtant sur le tout premier.
Toute idée est la bienvenue.
Merci d'avance.