GNU/Linux >> Tutoriels Linux >  >> Linux

Commande Nohup avec exemples

Nohup signifie "pas de raccrochage" et, comme son nom l'indique, empêche l'abandon automatique de la commande lorsque vous vous déconnectez ou quittez le shell.

Lorsque vous exécutez une commande Linux et que vous vous déconnectez après un certain temps de la session si cette commande n'a pas fini de s'exécuter, son processus sera tué.

Il existe toutes sortes de programmes qui nécessitent de nombreuses heures. Nous n'avons pas besoin d'attendre la commande pour terminer toute la tâche. Nous pouvons continuer à exécuter les programmes en arrière-plan en utilisant la commande nohup et vérifier la sortie plus tard.

Syntaxe de la commande nohup

La syntaxe de la commande nohup est :

nohup COMMAND [ARG]...

Par défaut, la sortie d'une commande est affichée sur le périphérique de sortie standard qui est le terminal qui a lancé le processus. Mais comme le terminal peut être fermé pendant la durée de vie du processus enfant, le terminal ne peut plus être le périphérique de sortie. Selon la page d'informations de la commande nohup,

If standard output is a terminal, the command's standard output is appended to the file `nohup.out'; if that cannot be written to, it is appended to the file `$HOME/nohup.out'; and if that cannot be written to, the command is not run. Any `nohup.out' or `$HOME/nohup.out' file created by `nohup' is made readable and writable only to the user, regardless of the current umask settings.

De même pour l'erreur standard,

If standard error is a terminal, it is normally redirected to the same file descriptor as the (possibly-redirected) standard output. However, if standard output is closed, standard error terminal output is instead appended to the file `nohup.out' or `$HOME/nohup.out' as above.

Cela signifie que par défaut, la sortie standard et l'erreur standard sont redirigées vers le fichier 'nohup.out'. Mais si vous souhaitez rediriger la sortie vers un autre fichier, vous pouvez toujours le faire en utilisant l'opérateur de redirection. Par exemple, pour intercepter la sortie de make,

nohup make > make.log

Pour une entrée standard,

If standard input is a terminal, it is redirected from `/dev/null' so that terminal sessions do not mistakenly consider the terminal to be used by the command. This is a GNU extension; programs intended to be portable to non-GNU hosts should use `nohup COMMAND [ARG]...

La commande nohup ne place pas automatiquement la commande en arrière-plan. Cela doit être fait explicitement avec &.

nohup make > make.log &

De plus, cette commande ne change pas la gentillesse (c'est-à-dire la priorité) d'une commande. Pour cela, la commande nice est utilisée comme par exemple 'nohup nice COMMAND'.

Comment utiliser la commande nohup

Nous pouvons utiliser nohup de deux manières. La première consiste à exécuter la commande avec des paramètres sans recevoir aucune autre entrée pendant le travail. Toutes les sorties, y compris les messages d'erreur, seront écrites dans le fichier nohup.out dans le répertoire de travail ou dans votre répertoire personnel. Si la commande est toujours en cours d'exécution lorsque vous vous déconnectez ou fermez le terminal, elle ne se terminera pas.

Essayons un exemple avec l'application memtester.

$ nohup sudo memtester 2048 5
nohup: ignoring input and appending output to 'nohup.out'
Killed

$ cat nohup.out 
memtester version 4.3.0 (64-bit)
Copyright (C) 2001-2012 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).

pagesize is 4096
pagesizemask is 0xfffffffffffff000
want 2048MB (2147483648 bytes)
got  1876MB (1968074752 bytes), trying mlock ...

Vous pouvez également rediriger la sortie vers un autre fichier au lieu de nohup.out en utilisant le symbole>.

$ nohup sudo memtester 2048 5 > result.txt

Utilisez la commande nohup avec '&'

Pour démarrer un processus et le mettre en arrière-plan, vous exécutez essentiellement la commande suivie du symbole "&". Le symbole "&" à la fin de la commande indique à bash d'exécuter nohup yourcommand en arrière-plan. Il peut être ramené au premier plan avec la commande fg.

$ nohup bash sleep1.sh &
[1] 653
$ nohup: ignoring input and appending output to 'nohup.out'
fg
-bash: fg: job has terminated
[1]+  Exit 127                nohup bash sleep1.sh

Exécutez plusieurs commandes en arrière-plan

Vous pouvez exécuter plusieurs commandes en arrière-plan à l'aide de la commande nohup. Dans l'exemple suivant, les commandes mkdir, touch et ls sont exécutées en arrière-plan à l'aide des commandes nohup et bash.

$ nohup bash -c 'mkdir TestDir && touch test2.file && ls'> output.txt
nohup: ignoring input and redirecting stderr to stdout

$ cat output.txt 
TestDir
nohup.out
output.txt
test2.file
testfile.txt

Démarrage et fin du processus en arrière-plan

Si vous exécutez la commande ping à l'aide de nohup, le processus ne se terminera pas lorsque vous fermerez le terminal.

$ nohup ping -i 15 linoxide.com &
[1] 806
$ nohup: ignoring input and appending output to 'nohup.out'

Vous pouvez fermer le terminal et le rouvrir. Exécutez maintenant la commande pgrep avec -a option.

$ pgrep -a ping
816 ping -i 15 linoxide.com

Vous obtiendrez la liste des processus avec l'identifiant du processus en cours d'exécution. Comme vous pouvez le voir, la commande ping que nous avons laissée en cours d'exécution n'est pas terminée. Pour mettre fin à tout processus d'arrière-plan, vous devez exécuter la commande kill. En tant que paramètre, nous devons utiliser l'ID de processus particulier en cours d'exécution.

Dans notre cas, l'identifiant du processus est 816. Exécutez kill 816 pour terminer le processus.

$ pgrep -a ping
816 ping -i 15 linoxide.com
$ kill 816

Conclusion

Nohup est très utile lorsque vous devez exécuter des scripts shell. Tmux, Screen et Disown sont quelques-uns des utilitaires alternatifs qui font le même travail que nohup.

J'espère que vous êtes maintenant familiarisé avec cet outil qui peut être utile dans de nombreux cas. Si vous avez des questions ou des commentaires, veuillez les publier ci-dessous.


Linux
  1. Commande Linux wc avec exemples

  2. Commande de tri Linux avec exemples

  3. Commande Linux Tee avec exemples

  4. Commande principale Linux avec exemples

  5. Commande JQ sous Linux avec exemples

15 Commande Linux ps avec exemples

Commande de CD Linux avec exemples

Commande Linux watch avec exemples

Commande Nohup Linux avec des exemples

Commande IP Linux avec exemples

Commande d'historique avec exemples