Comment utiliser la commande nohup sous Linux

PHPz
Libérer: 2023-05-12 08:52:10
avant
3995 Les gens l'ont consulté

Qu'est-ce que nohup

nohup est une commande dans les systèmes Linux et Unix. Sa fonction est de permettre au processus de continuer à s'exécuter en arrière-plan lorsque le terminal se ferme. Son nom complet est « no hang up », ce qui signifie « pas de raccroche ». La commande nohup vous permet de continuer à exécuter des commandes après avoir quitté le terminal ou fermé la connexion SSH. nohup是Linux和Unix系统中的一个命令,其作用是在终端退出时,让进程在后台继续运行。它的全称为“no hang up”,意为“不挂起”。nohup命令可以让你在退出终端或关闭SSH连接后继续运行命令。

nohup语法规则

nohup命令的基本语法如下:

nohup COMMAND [ARGS ...] [> output-file 2> error-file] &
Copier après la connexion

其中的参数含义如下:

  • COMMAND:需要在后台运行的命令或脚本。

  • ARGS:命令或脚本的参数。

  • > output-file:输出重定向到指定的文件中。

  • 2> error-file:错误信息重定向到指定的文件中。

  • &:将命令放在后台运行。

nohup命令的执行过程分为以下几个步骤:

  • nohup命令将当前shell的标准输入、标准输出和标准错误输出全部重定向到/dev/null设备中,避免被关闭终端的信号所中断。

  • nohup命令将进程放到后台执行,并将进程的PID输出到终端。

  • 进程开始执行,并将标准输出和标准错误输出重定向到指定的文件中。

  • 用户可以退出终端或关闭终端窗口,进程仍然在后台运行。

nohup使用方法

使用nohup命令非常简单,按照上面的基本语法即可。以下是一些nohup命令的用法示例:

后台运行命令

要在后台运行命令,只需要在命令行中输入以下命令即可:

nohup COMMAND &
Copier après la connexion

例如,在后台运行一个Bash脚本:

nohup bash test.sh &
Copier après la connexion

标准输出重定向到文件

nohup bash test.sh > stdout.txt &
Copier après la connexion

标准错误输出重定向到文件

nohup bash test.sh 2> stderr.txt &
Copier après la connexion

将标准输出和标准错误输出都重定向到文件

1. 重定向到同一文件

nohup bash test.sh > output.txt 2>&1 &
Copier après la connexion

2. 重定向到不同文件

nohup bash test.sh > stdout.txt 2> stderr.txt &
Copier après la connexion

3. 一个更为复杂的例子,重定向标准输入(stdin):

nohup ./myprogram > foo.out 2> foo.err < /dev/null &
Copier après la connexion

这里多出来一个< /dev/null,意思是将标准输入重定向到/dev/null,以确保程序不会从标准输入中读取任何数据。

这个是为了解决一个实际问题:SSH会话常常拒绝注销(或者挂起),因为它不愿意去丢失与后台job(s)进行交互的数据。当遇到这个问题的时候,可以使用上面的命令,通过三次重定向来解决。

nohup后台进程管理

使用 jobs 命令可以查看当前 shell 中后台运行的任务列表,包括任务编号、状态和命令。

例如,我们在后台执行一个sleep 1000命令,使用jobs命令查看:

$ jobs
[1]+  Running                 nohup sleep 1000 &
Copier après la connexion

其中,方括号中的数字表示任务编号,加号或减号表示任务的优先级,Running 表示任务正在后台运行。除此之外,还有其他可能的状态,包括 Stopped(已停止)、Done(已完成)等。

我们还可以使用 fg 命令将一个后台任务移动到前台继续运行,例如:

$ fg %1
Copier après la connexion

这个命令会将任务编号为 1 的任务移动到前台,继续执行。如果希望将任务暂停或恢复,可以使用 Ctrl-Z 键,在当前 shell 中发送 SIGTSTP 信号。

$ fg %1
nohup sleep 1000

^Z
[1]+  Stopped                 nohup sleep 1000
Copier après la connexion

此时如果想要恢复运行,可以使用bg命令:

$ bg %1
[1]+ nohup sleep 1000 &
Copier après la connexion

如果想要杀死该任务,可以使用kill命令:

$ kill %1
[1]+  Terminated              nohup sleep 1000
Copier après la connexion

如果你想杀死所有后台任务,但是又觉得一个个地比较麻烦,可以使用disown命令来解决:

$ disown -a
Copier après la connexion

这个命令可以杀死所有后台任务,但不会有任何提示,你可以通过jobs

Règles de syntaxe nohup🎜🎜La syntaxe de base de la commande nohup est la suivante : 🎜rrreee🎜La signification des paramètres est la suivante : 🎜
  • 🎜 COMMANDE : obligatoire Une commande ou un script qui s'exécute en arrière-plan. 🎜
  • 🎜ARGS : Paramètres de commande ou de script. 🎜
  • 🎜> fichier de sortie : rediriger la sortie vers le fichier spécifié. 🎜
  • 🎜2> error-file : Le message d'erreur est redirigé vers le fichier spécifié. 🎜
  • 🎜& : Exécutez la commande en arrière-plan. 🎜
Le processus d'exécution de la commande 🎜nohup est divisé en les étapes suivantes : 🎜
  • La commande 🎜nohup modifie l'entrée standard et la norme la sortie du shell actuel et la sortie d'erreur standard sont toutes redirigées vers le périphérique /dev/null pour éviter d'être interrompues par des signaux qui ferment le terminal. 🎜
  • La commande 🎜nohup met le processus en arrière-plan pour l'exécution et renvoie le PID du processus au terminal. 🎜
  • 🎜Le processus démarre l'exécution et redirige la sortie standard et la sortie d'erreur standard vers le fichier spécifié. 🎜
  • 🎜Les utilisateurs peuvent quitter le terminal ou fermer la fenêtre du terminal, et le processus s'exécutera toujours en arrière-plan. 🎜
🎜Comment utiliser nohup🎜🎜L'utilisation de la commande nohup est très simple, suivez simplement la syntaxe de base ci-dessus. Voici quelques exemples d'utilisation de la commande nohup : 🎜

Exécuter une commande en arrière-plan

🎜Pour exécuter une commande en arrière-plan, entrez simplement la commande suivante sur la ligne de commande : 🎜rrreee🎜Par exemple, pour exécuter un script Bash en arrière-plan :🎜rrreee

Rediriger la sortie standard vers un fichier

rrreee

Rediriger la sortie d'erreur standard vers un fichier

rrreee

Rediriger à la fois la sortie standard et la sortie d'erreur standard vers un fichier

🎜1. Redirection vers le même fichier🎜rrreee🎜2 Redirection vers un fichier différent🎜rrreee🎜3 Un exemple plus complexe, rediriger l'entrée standard (stdin) :🎜rrreee🎜Il y a un &lt ; /dev/null signifie rediriger l'entrée standard vers /dev/null pour garantir que le programme ne lit aucune donnée de l'entrée standard. 🎜🎜Il s'agit de résoudre un problème pratique : la session SSH refuse souvent de se déconnecter (ou se bloque) car elle ne veut pas perdre les données qui interagissent avec le(s) travail(s) en arrière-plan. Lorsque vous rencontrez ce problème, vous pouvez utiliser la commande ci-dessus pour le résoudre en redirigeant trois fois. 🎜

Gestion des processus en arrière-plan nohup

🎜Utilisez la commande jobs pour afficher la liste des tâches exécutées en arrière-plan dans le shell actuel, y compris les numéros de tâches, l'état et les commandes. 🎜🎜Par exemple, nous exécutons une commande sleep 1000 en arrière-plan, utilisons la commande jobs pour visualiser : 🎜rrreee🎜 Parmi eux, le nombre entre crochets représente la tâche nombre, plus ou moins Le nombre indique la priorité de la tâche et En cours d'exécution indique que la tâche s'exécute en arrière-plan. De plus, il existe d'autres états possibles, notamment Stopped (arrêté), Terminé (terminé), etc. 🎜🎜Nous pouvons également utiliser la commande fg pour déplacer une tâche en arrière-plan au premier plan pour continuer son exécution, par exemple : 🎜rrreee🎜Cette commande déplacera la tâche avec la tâche numéro 1 au premier plan et poursuivra l'exécution . Si vous souhaitez suspendre ou reprendre une tâche, vous pouvez utiliser les touches Ctrl-Z pour envoyer le signal SIGTSTP dans le shell actuel. 🎜rrreee🎜Si vous souhaitez reprendre l'opération à ce moment, vous pouvez utiliser la commande bg : 🎜rrreee🎜Si vous souhaitez tuer la tâche, vous pouvez utiliser la commande kill commande : 🎜rrreee🎜Si Si vous souhaitez supprimer toutes les tâches en arrière-plan, mais que vous trouvez difficile de les effectuer une par une, vous pouvez utiliser la commande disown pour résoudre le problème : 🎜rrreee🎜Cette commande peut supprimer toutes les tâches en arrière-plan, mais il n'y aura aucune invite. Vous pouvez le confirmer avec la commande jobs. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal