Bases de Linux et de la ligne de commande

Sur un serveur auquel on s'est connecté par SSH, on a lancé un long traitement avec « ./run.sh & », puis, en fermant la connexion, le traitement s'est arrêté lui aussi. Quelle est la manière la plus appropriée de le lancer pour qu'il continue après la fermeture de la connexion ?

  1. A./run.sh > run.log 2>&1 &
  2. Bnice -n 19 ./run.sh > run.log 2>&1 &
  3. Cnohup ./run.sh > run.log 2>&1 &
Afficher la réponse et l'explication

Réponse : C. nohup ./run.sh > run.log 2>&1 &

Quand la connexion est perdue, le signal SIGHUP, qui indique que le terminal a raccroché, est envoyé au shell, et les shells comme bash envoient eux aussi SIGHUP à leurs tâches. L'action par défaut à la réception de SIGHUP est de se terminer : les tâches en arrière-plan s'arrêtent donc aussi. nohup lance la commande de sorte qu'elle ignore SIGHUP, et si sa sortie est dirigée vers un fichier, le traitement continue après la fermeture de la connexion. Si on la lance depuis un terminal sans redirection de la sortie, nohup écrit la sortie dans un fichier nommé nohup.out. Une autre méthode courante consiste à utiliser un outil comme tmux ou screen, qui maintient la session de terminal sur le serveur et permet de s'y reconnecter plus tard.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases de Linux et de la ligne de commande

  1. Si l'on exécute les deux lignes ci-dessus dans un shell, quels caractères s'affichent ?
  2. Si l'on exécute dans l'ordre les commandes ci-dessus, quelle est la sortie des deux commandes echo ?
  3. Comme ci-dessus, on exécute le script s.sh avec des arguments. Quelle est la sortie ?
  4. Dans un script shell, dans quel cas la condition du if ci-dessus est-elle vraie ?
  5. Quels fichiers se trouvent dans le répertoire après la session ci-dessus ?