web-dev-qa-db-fra.com

Commandes Shell Asynchrones

Honnêtement, je ne peux pas croire que je ne trouve pas de solution à ce problème en ligne. Je suis tombé sur quelques choses qui semblent similaires, mais rien qui fait vraiment ce que je veux ...

J'essaie d'utiliser un script shell pour lancer une commande. Je ne me soucie pas si/quand/comment/pourquoi cela se termine. Je veux que le processus commence et s'exécute, mais je veux pouvoir revenir immédiatement à mon shell ...

J'espère que c'est assez clair, je manque probablement juste quelque chose d'incroyablement stupide

69
LorenVS

Vous pouvez simplement exécuter le script en arrière-plan:

$ myscript &

Notez que cela diffère de l'insertion du & dans votre script, qui ne fera probablement pas ce que vous voulez.

86
Carl Norum
Nohup cmd

ne raccroche pas lorsque vous fermez le terminal. la sortie par défaut va à Nohup.out

Vous pouvez combiner cela avec le backgrounding, 

Nohup cmd &

et se débarrasser de la sortie, 

Nohup cmd > /dev/null 2>&1 &

vous pouvez aussi disown une commande. tapez cmd, Ctrl-Z, bg, disown 

32
Steve B.

Tout le monde a juste oublié disown. Alors voici un résumé:

  • & met le travail en arrière-plan.

    • Le bloque lorsque vous essayez de lire une entrée, et
    • Fait que le shell n'attend pas son achèvement.
  • disown supprime le processus du contrôle de travail du shell, mais le laisse toujours connecté au terminal.

    • L’un des résultats est que le shell ne lui enverra pas une SIGHUP (si le shell reçoit une SIGHUP, il envoie également une SIGHUP au processus, ce qui entraîne normalement son arrêt).
    • Et évidemment, il ne peut être appliqué qu'aux tâches en arrière-plan (car vous ne pouvez pas y entrer lorsqu'un travail en avant-plan est en cours d'exécution).
  • Nohup déconnecte le processus du terminal, redirige sa sortie sur Nohup.out et le protège de SIGHUP.

    • Le processus ne recevra aucune SIGHUP envoyée.
    • Il est totalement indépendant du contrôle des tâches et peut en principe être utilisé également pour les tâches de premier plan (bien que cela ne soit pas très utile).
    • Habituellement utilisé avec & (comme tâche d’arrière-plan).
30
Ani Menon

Sinon, une fois le programme en cours d'exécution, vous pouvez appuyer sur Ctrl-Z, ce qui arrête votre programme et tapez 

bg

qui met votre dernier programme arrêté en arrière-plan. (Utile si vous avez commencé quelque chose sans '&' et que vous le voulez toujours dans le fond sans le redémarrer)

24
pajton

screen -m -d $command$ démarre la commande dans une session détachée. Vous pouvez utiliser screen -r pour vous connecter à la session démarrée. C'est un outil formidable, extrêmement utile également pour les sessions à distance. Lire plus à man screen

0
mluthra