Quand j'exécute `./command.sh &` la tâche d'arrière-plan est suspendue. Comment puis-je le faire fonctionner?

C'est ce que je cours:

alexandma@ALEXANDMA-1-MBP ./command.sh & [2] 30374 alexandma@ALEXANDMA-1-MBP [2] + suspended (tty output) ./command.sh 

Je ne veux pas le suspendre pour commencer, je veux qu'il continue à courir en arrière-plan. Je vais lancer un tas de ceux-ci dans une boucle, donc j'ai besoin de quelque chose qui fonctionnera de cette façon.

Comment puis-je le faire fonctionner?

Il s'arrête à cause de la raison donnée: il tente de sortir en tty. Vous pouvez essayer de redirect le résultat si ./command.sh supporte, ou exécuter la command dans un tmux ou screen window d' screen propre. Par exemple

  tmux new-window -n "window name" ./command.sh 

puis afficher la list des windows créées avec tmux list-windows et joindre à tmux avec tmux attach .

De cette façon, le programme attendra toujours l'input / sortie, mais vous pouvez facilement fournir des inputs une fois que vous allez à la window appropriée et la sortie sera simplement capturée sans aucune activité.

Ajout d'un détail à l'explication d'Anthon:

Ce n'est pas toujours le cas si un process d'arrière-plan d'écriture est arrêté. Cela dépend du réglage du terminal.

 stty tostop stty -tostop 

peut être utilisé pour basculer ce paramètre. Donc, si vous voulez qu'un process d'arrière-plan écrive dans le terminal "d'un autre process", vous pouvez le faire fonctionner sans avoir besoin de tmux , d'un screen ou similaire.

La façon la plus simple de le faire serait d'exécuter la command comme suit:

  nohup ./command.sh </dev/null & 

J'inclus le nohup dans le cas où vous utilisez une variante SH (et non la variante CSH) et mettrait fin à votre session.

screen installation.

Une fois que vous avez installé l'écran. Exécutez-le: # screen (vous recevrez un écran de bienvenue lors du premier démarrage) Exécutez votre command: command.sh

Appuyez sur Ctrl + a puis sur d .

Il va détacher l'écran lancé sur le server et garder votre command en cours d'exécution.

Pour revenir à cet écran, tapez:

screen -r