一文带你深入理解Linux中的nohup命令

 更新时间:2023年03月31日 09:53:33   作者:baddate  
nohup是Linux和Unix系统中的一个命令,其作用是在终端退出时,让进程在后台继续运行。这篇文章主要来和大家讲讲它的使用,需要的可以参考一下

前言

当我们在Linux或Unix系统上执行一个长时间运行的命令或脚本时,我们通常会遇到一个问题,那就是在终端关闭或者退出后,该进程也会随之停止运行。在这种情况下,我们需要一种方式来让进程在后台运行,而不受终端关闭的影响。这时,nohup命令就派上用场了。

nohup是什么

nohup是Linux和Unix系统中的一个命令,其作用是在终端退出时,让进程在后台继续运行。它的全称为“no hang up”,意为“不挂起”。nohup命令可以让你在退出终端或关闭SSH连接后继续运行命令。

nohup语法规则

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命令的用法示例:

后台运行命令

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

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)进行交互的数据。当遇到这个问题的时候,可以使用上面的命令,通过三次重定向来解决。

nohup后台进程管理

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

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

$ jobs
[1]+  Running                 nohup sleep 1000 &

其中,方括号中的数字表示任务编号,加号或减号表示任务的优先级,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 &

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

$ kill %1
[1]+  Terminated              nohup sleep 1000

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

$ disown -a

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

总结

nohup命令可以在后台运行程序,即使终端关闭或断开与远程服务器的连接也不会影响程序的运行。通过nohup命令启动的进程会忽略所有终端信号,因此即使使用Ctrl+C关闭终端,进程也不会停止。可以使用jobs命令查看后台运行的进程,并使用fg命令将进程切换到前台运行。

nohup非常适合用来执行一些需要长时间运行的脚本或程序,比如Web服务器,数据库等。但需要注意的是,nohup命令并不是完全避免了进程被中断的可能,例如系统崩溃、进程错误等情况仍可能导致进程的中断。

到此这篇关于一文带你深入理解Linux中的nohup命令的文章就介绍到这了,更多相关Linux nohup命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • linux crontab实例分析

    linux crontab实例分析

    cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务
    2011-03-03
  • Ubuntu下安装rsh实现无密码访问详解

    Ubuntu下安装rsh实现无密码访问详解

    这篇文章主要为大家详细介绍了Ubuntu下安装rsh实现无密码访问的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Apache配置多个站点的方法

    Apache配置多个站点的方法

    Apache配置多个站点的方法,需要的朋友可以参考下。
    2010-04-04
  • Linux下的SVN服务器搭建步骤

    Linux下的SVN服务器搭建步骤

    本篇文章主要介绍了Linux下的SVN服务器搭建步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Linux kde中11个你不知道的应用程序

    Linux kde中11个你不知道的应用程序

    今天小编就为大家分享一篇关于Linux kde中11个你不知道的应用程序,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • 科普Solaris系统安全常用命令小结

    科普Solaris系统安全常用命令小结

    Solaris系统下维护密码和登录控制 监控系统使用情况 限制文件访问 root用户登录 控制通过网络的远程访问
    2008-06-06
  • Linux切换用户环境变量消失问题及解决

    Linux切换用户环境变量消失问题及解决

    这篇文章主要介绍了Linux切换用户环境变量消失问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Nginx出现500 Internal Server Error 错误的解决方案

    Nginx出现500 Internal Server Error 错误的解决方案

    这篇文章主要介绍了Nginx出现500 Internal Server Error 错误的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • CentOS 7.x编译安装Nginx1.10.3+MySQL5.7.16+PHP5.2 5.3 5.4 5.5 5.6 7.0 7.1多版本全能环境

    CentOS 7.x编译安装Nginx1.10.3+MySQL5.7.16+PHP5.2 5.3 5.4 5.5 5.6

    这篇文章主要介绍了CentOS 7.x编译安装Nginx1.10.3+MySQL5.7.16+PHP5.2 5.3 5.4 5.5 5.6 7.0 7.1多版本全能环境,需要的朋友可以参考下
    2018-01-01
  • Linux系统之service创建方式

    Linux系统之service创建方式

    Linux下创建service的方法:1.创建一个新的service文件在/etc/systemd/system目录中,2.编写service文件的内容,包括Description、After、ExecStart、User、Group、Restart和WantedBy,3.启用service,使用命令systemctl enable
    2024-11-11

最新评论