Forum Programmation.shell cmd& me met bien le processus en BG mais stoppé

Posté par  .
Étiquettes : aucune
0
30
juin
2007
Il m'est impossible de mettre un processus s'executant automatiquement en arrière plan, je dois toujours confirmer avec un 'bg'

j'obtiens cela après un maCMD&
[1] + suspended (tty output) maCMD

Alors que ca devrait être "+ running", non?

Parcontre, quand je stoppe un processus par Ctrl+z et que je tapote 'bg', il me met bien le processus tournant en fond.

Qu'est-ce qui cloche, svp?

Je suis trop rouillé.
  • # .

    Posté par  . Évalué à 2.

    c'est quoi ton shell et ta commande ?
    • [^] # Re: .

      Posté par  (site web personnel) . Évalué à 2.

      Pour mettre un commande en vrai arrière plan (et éviter de la perdre quand tu clos le shell) tu as ces moyens :
      $ setsid ta_commande

      Ou :
      $ ta_commande
      Ctrl+z

      [1]+ Stopped ta_commande
      $ bg
      (enfin celui là je suis pas sûr de ce qui arrive si tu clos le shell)
      • [^] # Re: .

        Posté par  . Évalué à 2.

        bof, tu ferme pas vraiement les flux qui le ratache au shell, et tu le detache pas non plus du pere.

        le mieux est un truc du genre :
        (ta_commande 1> /dev/null 2> /dev/null < /dev/null &)
      • [^] # Re: .

        Posté par  . Évalué à 1.

        Y'a la commande "nohup" aussi, qui existe sur les Unix.

        Pour la question de Laphyntix, il faudrait qu'il nous fasse un copier collé de son shell, que l'on voit exactement ce qu'il tape, et ce que répond le shell.
    • [^] # Re: .

      Posté par  . Évalué à 1.

      Bash ou Zsh, c'est le même resultat et peut importe la commande.
      Par exemple:

      laphyntix@Organe ~% mplayer '/tmp/truc.mp3'&
      [1] 1861
      laphyntix@Organe ~% MPlayer 1.0rc1-3.4.6 (C) 2000-2006 MPlayer Team
      CPU: Intel Celeron 2/Pentium III Coppermine,Geyserville (Family: 6, Model: 8, Stepping: 10)
      CPUflags: MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 0
      Compiled for x86 CPU with extensions: MMX MMX2 SSE

      [1] + suspended (tty output) mplayer '/tmp/truc.mp3'


      C'est pour le lancement d'un script personnalisée, mais si je ne peux pas mettre un processus en fond, ca me poserait quelques soucis.

      Raphael: le 'setsid' fonctionne mais ca crée une nouvelle session.
      Juste par curiosité, est-ce normal qu'avec la méthode que j'utilisais, le processus s'arrête en arrière plan?
      Car de mémoire, je ne pense pas que ca se passait comme cela par le passé.

      Sinon Merci les gars pour votre intervention.
      • [^] # Re: .

        Posté par  . Évalué à 3.

        J'ai peut être une idée : n'est ce pas tout simplement le programme qui a besoin de rester connecté à l'utilisateur pour son bon fonctionnement ? Et du coup, en l'absence de connexion, s'arrête ?

        Dans le cas de mplayer, on ne peut le contrôler que par des commande claviers, par le terminal. S'il se retrouve en tâche de fond, on ne peut plus le envoyer de commande de lecture/pause/arrêt.

        A moins bien sûr qu'il dispose d'un mode de fonctionnement en démon, à préciser par une option ...
        • [^] # Re: .

          Posté par  . Évalué à 1.

          Je rappelle que c'est vouloir mettre le processus directement en fond sans le suspendre.
          Donc sans avoir à confirmer par un 'bg'.
          Je pensais que c'était possible avec un '&' suivant la fameuse commande.
          Est-ce possible ou non? Mes souvenirs sont trompeurs.

          Quant à MPLAYER, il tourne très bien en tâche de fond.

          Merci
          • [^] # Re: .

            Posté par  . Évalué à 2.

            Je pensais que c'était possible avec un '&' suivant la fameuse commande.

            Oui, à condition que la commande n'essaie pas de dialoguer avec le terminal. Dans ce cas, le kernel suspend le programme (d'où le "suspended (tty output)") jusqu'à ce que celui-ci y ait à nouveau accès.

            Dans le cas de mplayer, je viens de tester et j'obtiens les résultats suivants:
            mplayer fichier &
            mplayer est suspendu; si je fais "fg" puis CTRL-Z "bg", il continue bien en background.

            mplayer fichier < /dev/null &
            mplayer tourne sans problème en arrière plan.

            Conclusion:
            mplayer doit faire un accès au "standard input" au démarrage, ce qui provoque sa suspension.
            Il ne doit plus en faire par la suite, il n'est donc pas bloqué après la mise en arrière-plan manuelle
            • [^] # Re: .

              Posté par  (site web personnel) . Évalué à 3.

              Voilà. Enfin pas tout à fait, mplayer écoute le standard input tant qu'il est lancé si tu ne lui passes pas l'option qu'il faut.

              Donc plutôt que de balancer /dev/null comme entrée, on peut se contenter de l'option -slave de mplayer qui fait qu'il n'attend plus quoi que ce soit du tty qui l'a lancé. A combiner avec l'option -really-quiet sinon il va continuer de pourir la console. (il y a aussi l'option -idle qui pourra peut-être servir, selon ce que veut faire Laphyntix). MPlayer écoute en effet ce qui lui est dit depuis le tty (sinon, ce serait difficile de l'interrompre quand il lit des fichiers audio...)

              Conclusion :
              mplayer est un programme particulier : il cause avec l'entrée et la sortie standard. Il ne te vient pas à l'idée de mettre mutt en arrière plan par exemple. Mais les programmes à gui où sans interaction peuvent se détacher (iceape, xterm, wget...).
              Et lire le man de mplayer est fastidieux mais utile (utilise groff -man -T html si lire du man te révulse).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.