IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Solution pour mettre en pause et relancer processus par nom


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 6
    Par défaut Solution pour mettre en pause et relancer processus par nom
    Bonjour à tous


    je suis à la recherche d'une solution pour mettre en pause automatiquement un processus (dont je ne connais que le nom), puis de la relancer automatiquement

    Voila la structure de mon "dispositif" :
    1 - j'ai 1 processus de fond qui tourne (avec l'utilitaire screen) en continu (24h/24)
    2 - j'ai 1 un programme écrit en python qui lance des calculs (basés sur de l'astronomie). Ces calculs me retournent des heures qui sont ensuite envoyé dans le crontab pour execution d'une commande particulière.
    La commande qui s'execute est la même que celle en tache de fond (1) mais avec des arguments différents.
    Le programme s'execute chaque jour (il est recursif dans le crontab).

    Le soucis, c'est que la tache de fond et les taches lancées par le crontab sont incompatible.
    J'ai donc besoin de mettre en pause le processus de fond, de laisser tourner les commandes générées par crontab (je connais leur temps d'execution) et de relancer la tâche de fond


    Je ne sais pas si c'est très clair.
    Pour simplifier de façon concrète:

    1 - TF1 diffusé par (disons : mplayer -chaine TF1) 24h/24 sur l'écran.
    2 - des calculs (d'un script python) lancent FR2 (disons : mplayer -chaine FR2) à certains moments de la journée (qui durent tous maximum 10mn).

    Je ne peux pas regarder TF1 et FR2 en meême temps.
    J'ai donc besoin de mettre pause TF1 lorsque le crontab lance FR2 pendant 10mn.
    Lorsque FR2 est fini (ou que la durée max est dépassé), il me faut poursuivre TF1 (à partir de l'endroit où il s'était mis en pause)



    Je sais trouvé un processus mais je ne sais pas comment allez + loin.
    A priori, je n'ai qu'un seul procesus de ce nom qui tourne.
    ps aux | grep process1 => Comment virer l'affichage du PID du "grep" et ensuite comment extraire le pid restant de façon à pouvoir le mettre en pause et ensuite le relancer plus tard?

    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 646
    Par défaut
    Bonjour,

    ça sent le gaz...


    pour reprendre ta parabole , je ne comprends ce qui t'empêche de lancer plusieurs instances de "mplayer"

    des [données] qui sont ensuite envoyées dans le crontab
    [...]
    recursif dans le crontab
    ?
    c'est mal exprimé, ou effrayant.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour,

    [mode_vieux_con]De nos jours, les ordinateurs sont multi-tâches.[/mode_vieux_con] Quel est la vraie incompatibilité?

    Manifestement, tu as le contrôle des deux processus. Il vaut mieux faire ça dans la douceur du choix du processus permanent plutôt que brutaliser un processus permanent par le caprice d'un autre de passage.

    [mode_perroquet]L'astuce du grep est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ps aux | grep pr[o]cess1
    [/mode_perroquet]

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 828
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 828
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par beginner936 Voir le message
    Je ne peux pas regarder TF1 et FR2 en meême temps.
    Toi non mais ton ordi si. Les deux processus tournent chacun dans une bulle totalement indépendante l'un de l'autre. Chaque bulle a sa propre mémoire et ses propres ressources. C'est même tellement indépendant qu'il faut passer par des outils spéciaux pour transmettre des infos de l'un vers l'autre...

    Le seul danger c'est quand différents programmes vont écrire dans un même fichier commun sans précaution.

    Mais pour info t'as pgrep (moins compliqué que piper un ps) et pkill, des commandes destinées à trouver un processus par son nom et à lui envoyer un signal. Et t'as le signal SIGSTOP (généralement 19) et SIGCONT (généralement 18) qui te permettent de "pauser" puis faire repartir un processus.

    Et sinon comme N_Bah j'ai rien compris à cette histoire d'heures envoyées dans le crontab. Non pas que ce ne soit pas possible mais j'imagine mal un processus récupérant des données de façon illimitée faisant alors grossir une crontab (destinée à faire tourner des commandes de façon périodique) là aussi de façon illimitée. Ou alors à se livrer à de difficiles opérations de remplacement dans le fichier de paramétrage du cron de l'utilisateur...
    Si j'avais dû programmer un truc qui ressemble à ce que j'imagine, alors j'aurais écrit un programme X (placé dans un crontab unique et donc exécuté de façon périodique) utilisant un fichier de données externe ; et mon programme Y destiné à recueillir les infos aurait été programmé pour envoyer les infos dans ledit fichier...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    ça sent le gaz...


    [...]

    ?
    c'est mal exprimé, ou effrayant.
    ou les deux...

    mais des façons simples de gérer le truc
    killall -s STOP mplayer
    killall -s CONT mplayer
    ou sinon par pid
    kill -SIGSTOP $pid # Stop
    kill -SIGCONT $pid # Start

    mais je comprends tjrs pas l'interêt de tenter de lire 2 chaines à la fois... surtout en en mettant une en pause...
    si tu veux faire de la diffusion d'extrait, ou de la capture, utilises des flux séparés et ségmentés.... donc faut que tu changes totallement ta méthodologie ....

    parce que là ca pue très clairement le truc fait à l'arrache en 3secondes qui a évolué mais n'est plus adapté et que tu refuserai de modifier "from scratch"....


    une méthode est donc de faire :

    admettons que tu lances ton TF1 H24... il n'a donc aucun interêt a ếtre lancé par un crontab mais au contraire par un script qui serait lancé via l'inittab en mode respawn.
    ton script lance ton ton mplayer <optionsquivontbienpour TF1>
    et enregistre dans une variable quelconque ou un fichier plat dans /var/run l'identification de ce lancement.

    ton script2 lui lancé à heures programmés par ta crontab
    lit l'info sur l'identification de ton mplayer TF1 dans le fameux fichier d'indentification
    lance un kill -SIGSTOP $pid # Stop sur ce processus
    lance mplayer <optionsquivontbienpour France2>
    lance un kill -SIGCONT $pid # Start sur le processus TF1
    exit 0

    comme ça TF1 lancé par l'inittab en respawn si ton processus TF1 chie... il est relancé automatiquement
    ton player FR2 tourne sans gène TF1 est en pause
    ton player TF1 n'est plus en pause
    et le cycle recommance.




    je viens de me rappeler qu'on peut utiliser nativement un mode commande-piloté avec mplayer ....
    par exemple un test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mkfifo /tmp/mplayer-control
    mplayer -slave -input file=/tmp/mplayer-control /home/francois/tmps/D/* &
    sleep 10
    echo "pause" > /tmp/mplayer-control #declancher la pause
    mplayer /home/francois/tmps/montage_1.avi
    echo "pause" > /tmp/mplayer-control #désenclancher la pause oui oui ré-envoyer pause pour en sortir
    tout est documenté là sur le site officiel : http://www.mplayerhq.hu/DOCS/tech/slave.txt pour piloter le mode slave de mplayer

Discussions similaires

  1. Mettre une pause dans un programme
    Par PNL dans le forum Général Java
    Réponses: 12
    Dernier message: 28/01/2016, 00h54
  2. [MySQL] Les solutions pour mettre en place un moteur de recherche
    Par nesswaw dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 09/09/2011, 16h09
  3. Réponses: 3
    Dernier message: 24/07/2009, 16h51
  4. Comment mettre en Pause une Thread et la relancer?
    Par Hellik dans le forum VB.NET
    Réponses: 6
    Dernier message: 14/07/2009, 12h28
  5. [Performance] Solution pour mettre en cache l'application
    Par anthyme dans le forum Silverlight
    Réponses: 6
    Dernier message: 28/02/2008, 13h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo