千家信息网

Linux中使用nohup与screen运行后台任务的区别是什么

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,Linux中使用nohup与screen运行后台任务的区别是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。使用SSH
千家信息网最后更新 2026年11月02日Linux中使用nohup与screen运行后台任务的区别是什么

Linux中使用nohup与screen运行后台任务的区别是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

使用SSH终端(比如putty,xshell)连接Linux服务器上运行比较耗时任务,可能需要几个小时甚至几天才能完成,这时候终端被占据,我们还要做其他的任务呢,所以需要将这一类耗时任务放到后台来跑,只需要记录好日志就行了,有下面这些常用方法来实现这个需求。

command &

在终端输入command &运行,这时候使用Ctrl + C中止命令将会失效,因为对&后台运行SIGINT1信号免疫,程序会继续运行。 但如果你直接关掉终端, 进程将跟着中止。 可见,使用&后台运行的进程会被SIGHUP2信号中止,但是你如果用exit命令正常退出终端,程序将继续运行在后台不会中止。

nohup command

标准输出会被默认追加到当前目录下的nohup.out中,如果当前目录的nohup.out文件不可写,输出重定向到 $HOME/nohup.out文件中。

那么,我们很容易想到将这两个特性综合一下这样运行命令:

nohup command > /home/user/myfile.log 2>&1 &

这样将会在后台一直执行这个任务直到完成,并将程序标准输出(1)标准错误(2)都定向到/home/user/myfile.log文件中。

screen工具

screen可以理解为一个会话窗口管理工具,对于一般的使用,我们只需要会使用下面在这些操作即可:

# 使用yum安装screenyum install screen# 创建一个名为test的会话窗口screen -S test# 暂离窗口Ctrl+a d(即按住Ctrl,依次再按a,d)# 查看存在的会话窗口screen -ls# 进入窗口screen -r testscreen -r 进程ID# 关闭窗口exit# 窗口切换Ctrl+a c :在当前screen会话中创建窗口Ctrl+a w :窗口列表Ctrl+a n :下一个窗口Ctrl+a p :上一个窗口Ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换

有了在screen工具,我们就可以在终端上创建窗口,然后运行需要的命令,然后暂离,然后就可以继续做其他的事情了,当然,也可以用其他的终端连接服务器后使用screen -r 命令连接需要的窗口,会发现程序一直在运行,退出终端也不会影响到那些暂离的终端上运行的程序。

测试:

我们写一个测试脚本test.sh:

#!/bin/shfor ((i=1; i<1000; i++))do  d=`date '+%Y-%m-%d %H:%M:%S'`  echo "$d 第 $i 次输出;"  tt  sleep 2sdoneBash

只使用&后台运行:

[root@localhost test.cc]# ./test.sh > test.log 2>&1 &[1] 15037[root@localhost test.cc]# ps -aux | grep test.shroot   15037 0.0 0.0 113180 1424 pts/0  S  16:10  0:00 /bin/sh ./test.shroot   15045 0.0 0.0 112712  992 pts/0  S+  16:10  0:00 grep --color=auto test.shBash

可以看到15037进程在运行;

如果直接关闭终端,日志记录就停止了,说明进程随着终端会话的结束而停止执行了;

但是,经过反复测试发现,如果使用exit命令正常退出终端,再连上终端后,使用&运行的程序继续在运行,也就是&命令跟nohup效果是一样的,我这里使用的测试环境是CentOS7.6。

使用nohup &运行

[root@localhost test.cc]# nohup ./test.sh > test.log 2>&1 &[1] 14349

测试结果,直接关闭终端或者使用exit命令退出终端,程序都会继续执行。

使用screen运行

# 创建窗口screen -S test# 运行命令,这里可以不用后面的&,只是程序会把窗口占用./test.sh > test.log 2>&1 &# 暂离Ctrl + a d

这时候可以直接关闭终端了,然后重新连接,发现程序依然在运行,如果要找到窗口连接:

# 存在的窗口[root@localhost ~]# screen -lsThere is a screen on:  18048.test (Detached)1 Socket in /var/run/screen/S-root.# 进入窗口[root@localhost ~]# screen -r test

进入之后会发现,窗口依然保持着暂离之前的状态,包括之前输入的程序和命令,当你在窗口中输入exit命令退出窗口,如果你前面命令后面没有使用&,程序将会中止,因为相对于test窗口来说,这是一个前台程序,窗口退出了程序自然就跟着中止了。

因为screen的暂离功能,可以实现暂离窗口中保持前台程序的继续运行,相对于真正的终端而言,就相当于后台运行了。

程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程 ↩︎

终端连接结束时发出, 通常是关闭终端, 通知同一session内的各个进程组 ↩︎

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

运行 终端 程序 命令 后台 进程 任务 测试 输出 信号 前台 工具 文件 标准 输入 日志 服务器 目录 跟着 需求 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网是第几次科技革命的成果 互联网科技工作委员会副主任毛军 鸠鸠互联网科技 互联网科技的发展 北京互联网科技公司 菲比寻常互联网科技 广西互联网科技公司 哈尔滨秒房互联网科技有限公司 银川新华互联网科技学校地址 现代互联网科技股 江阴互联网智能科技产品进口 电子科技大学互联网创业大赛 深圳育鹏互联网科技有限公司招聘 互联网科技股为什么大涨 广州梦谷互联网科技有限公司领导 福州德业互联网科技 保山互联网科技靠谱吗 三亚科技创新互联网基地 互联网对科技影响 优雇互联网科技有限公司 互联网最新的科技 深圳互联网络科技有限公司 丰台科技园 互联网 互联网 科技馆 农村开互联网科技讲堂 岳阳华臻互联网科技有限公司 民营互联网公司国防科技 高科技互联网套路 伍佰万互联网科技怎么赚钱 互联网科技股为什么大涨
0