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 COMMAND [ARGS ...] [> output-file 2> error-file] &
其中的参数含义如下:
COMMAND
:需要在后台运行的命令或脚本。
ARGS
:命令或脚本的参数。
> output-file
:输出重定向到指定的文件中。
2> error-file
:错误信息重定向到指定的文件中。
&
:将命令放在后台运行。
nohup命令的执行过程分为以下几个步骤:
nohup命令将当前shell的标准输入、标准输出和标准错误输出全部重定向到/dev/null
设备中,避免被关闭终端的信号所中断。
nohup命令将进程放到后台执行,并将进程的PID输出到终端。
进程开始执行,并将标准输出和标准错误输出重定向到指定的文件中。
用户可以退出终端或关闭终端窗口,进程仍然在后台运行。
使用nohup命令非常简单,按照上面的基本语法即可。以下是一些nohup命令的用法示例:
要在后台运行命令,只需要在命令行中输入以下命令即可:
nohup COMMAND &
例如,在后台运行一个Bash脚本:
nohup bash test.sh &
nohup bash test.sh > stdout.txt &
nohup bash test.sh 2> stderr.txt &
1. 重定向到同一文件
nohup bash test.sh > output.txt 2>&1 &
2. 重定向到不同文件
nohup bash test.sh > stdout.txt 2> stderr.txt &
3. 一个更为复杂的例子,重定向标准输入(stdin):
nohup ./myprogram > foo.out 2> foo.err < /dev/null &
这里多出来一个< /dev/null
,意思是将标准输入重定向到/dev/null
,以确保程序不会从标准输入中读取任何数据。
这个是为了解决一个实际问题:SSH会话常常拒绝注销(或者挂起),因为它不愿意去丢失与后台job(s)进行交互的数据。当遇到这个问题的时候,可以使用上面的命令,通过三次重定向来解决。
使用 jobs
命令可以查看当前 shell 中后台运行的任务列表,包括任务编号、状态和命令。
例如,我们在后台执行一个sleep 1000
命令,使用jobs
命令查看:
$ jobs [1]+ Running nohup sleep 1000 &amp;
其中,方括号中的数字表示任务编号,加号或减号表示任务的优先级,Running
表示任务正在后台运行。除此之外,还有其他可能的状态,包括 Stopped
(已停止)、Done
(已完成)等。
我们还可以使用 fg
命令将一个后台任务移动到前台继续运行,例如:
$ fg %1
这个命令会将任务编号为 1 的任务移动到前台,继续执行。如果希望将任务暂停或恢复,可以使用 Ctrl-Z
键,在当前 shell 中发送 SIGTSTP
信号。
$ fg %1 nohup sleep 1000 ^Z [1]+ Stopped nohup sleep 1000
此时如果想要恢复运行,可以使用bg
命令:
$ bg %1 [1]+ nohup sleep 1000 &amp;
如果想要杀死该任务,可以使用kill
命令:
$ kill %1 [1]+ Terminated nohup sleep 1000
如果你想杀死所有后台任务,但是又觉得一个个地比较麻烦,可以使用disown
命令来解决:
$ disown -a
这个命令可以杀死所有后台任务,但不会有任何提示,你可以通过jobs
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&gt; error-file
: Le message d'erreur est redirigé vers le fichier spécifié. 🎜&
: Exécutez la commande en arrière-plan. 🎜/dev/null
pour éviter d'être interrompues par des signaux qui ferment le terminal. 🎜/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. 🎜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!