当内核在终端关闭时向进程发送SIGHUP信号时,我们使用nohup命令来防止进程被杀死。在这篇文章中,我们通过实例来了解这个命令。
目录.
- 介绍。
- 语法。
- 摘要.
- 参考文献.
引言。
在Linux中,当我们在终端中运行一个进程并突然关闭它时。该进程就会自动终止。在其他情况下,我们可能通过SSH连接到一个远程主机,执行一些关键的操作,如做备份、复制文件,而突然遇到网络连接问题。
通常,当网络断开或我们关闭终端会话时,会向当前进程发送一个SIGHUP信号,以示终端挂起,从而终止当前执行的进程,这包括在后台运行的由终端发起的作业。
为了对付这种情况,我们使用nohup命令将进程作为一个后台进程运行。即使在终端关闭或网络断开后,该命令仍将继续执行。
该命令的作用是防止进程收到SIGHUP信号,该信号是在终端关闭时由内核发送的。
命令的输出情况如何?有些进程产生的输出是非常有用的,当我们关闭终端时,我们将没有地方查看输出。nohup命令将其输出(stdin)和错误(stderr)重定向到一个输出文件nohup.out。我们也可以指定输出文件,在这种情况下,输出不会被发送到nohup.out文件。
语法。
我们使用下面的语法来编写nohup命令。
$ nohup COMMAND [ARG]...
命令的用法。
为了开始,让我们在前台启动一个进程,并将其输出发送到输出文件nohup.out。
$ nohup command
现在,当我们把文件nohup.out串联起来时,我们就得到了命令执行时应该显示的输出。
我们还可以使用I/O重定向将输出重定向到一个特定的文件。
$ nohup command > outputFile.txt
在上面的例子中,我们将输出重定向到一个名为out.txt的文件。
在Linux中,我们通过在命令的末尾加上*&符号来在后台运行命令。例如,为了在后台执行ping*命令,我们写道。
$ nohup ping 8.8.8.8 &
我们可以通过键入fg将该进程带回前台。
我们还可以关闭当前的终端会话,并启动一个新的终端会话。当我们列出当前执行的进程时,我们会看到我们之前启动的进程。要列出该进程,我们要写。
$ ps -aux | grep ping
要杀死这个进程,我们首先要找到它的进程IDPID,然后执行kill命令。
$ kill PID
我们并不局限于一个命令,我们可以在后台执行多个命令,并将输出发送到一个文件,如下所示。
$ nohup bash -c '[command 1] && [command 2] && [command 3]' > outputFile.txt
摘要。
当内核在终端关闭时发出SIGHUP信号时,我们使用nohup命令来防止进程被杀死。在我们遇到网络问题、电源问题,或者只是想让一个进程在计算机注销的情况下继续运行的情况下,我们使用nohup命令。
参考资料。
对于nohup命令的全面指导,我们可以在终端执行**$ man nohup**命令,以获得命令手册。