浅析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安装screen
yum install screen
# 创建一个名为test的会话窗口
screen -S test
# 暂离窗口
Ctrl+a d(即按住Ctrl,依次再按a,d)
# 查看存在的会话窗口
screen -ls
# 进入窗口
screen -r test
screen -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/sh
for ((i=1; i<1000; i++))
do
  d=`date '+%Y-%m-%d %H:%M:%S'`
  echo "$d 第 $i 次输出;"
  tt
  sleep 2s
done
Bash

只使用&后台运行:

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

可以看到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 -ls
There 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内的各个进程组 ↩︎

总结

以上所述是小编给大家介绍的浅析Linux中使用nohup及screen运行后台任务的示例和区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • linux下终端分屏使用的两种方法(screen和tmux)

    本文主要介绍两种终端分屏工具:screen和tmux,分享出来供大家参考学习,下面来看看详细的介绍: 一.使用screen分屏(只能上下分屏,不能左右分屏) (1)安装工具 在ubuntu系统中使用sudo apt-get install screen 安装screen工具 (2)使用工具 1,输入命令screen使用工具 2,上下分屏:ctrl + a  再按shift + s 3,切换屏幕:ctrl + a  再按tab键 4,新建一个终端:ctrl + a  再按c 5,关闭一个终端:ct

  • Linux一个增强的截图及分享工具:ScreenCloud

    ScreenCloud 是一个很棒的小程序,你甚至不知道你需要它.桌面 Linux 的默认屏幕截图流程很好(PrtScr 按钮),我们甚至有一些 强大的截图工具 ,如 Shutter .但是,ScreenCloud 有一个非常简单但非常方便的功能,让我爱上了它.在我们深入它之前,让我们先看一个背景故事. 我截取了很多截图,远超常人.收据.注册详细信息.开发工作.文章中程序的截图等等.我接下来要做的就是打开浏览器,浏览我最喜欢的云存储并将重要的内容转储到那里,以便我可以在手机上以及 PC 上的多个

  • linux nohup及tail-f用法

    在启动linux服务器的weblogic时,一般是在bin 目录下面执行nohup ./startWeblogic& 那么它与普通的./startWeblogic有什么区别呢? 先解释nohup这个命令 以下是官方的解释: nohup 命令 用途:不挂断地运行命令. 语法:nohup Command [ Arg - ] [ & ] 描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号.在注销后使用 nohup 命令运行后台

  • linux中 关于screen 的命令详解

    一.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了.必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了. 二.简介 GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件.用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换. GNU

  • php守护进程 加linux命令nohup实现任务每秒执行一次

    Unix中 nohup 命令功能就是不挂断地运行命令,同时 nohup 把程序的所有输出到放到当前目录 nohup.out 文件中,如果文件不可写,则放到 <用户主目录>/nohup.out 文件中.那么有了这个命令以后我们php就写成shell 脚本使用循环来让我们脚本一直运行下去,不管我们终端窗口是否关闭都能够让我们php 脚本一直运行下去. 马上动手写个 PHP 小程序,功能为每30秒记录时间,写入到文件 复制代码 代码如下: # vi for_ever.php #! /usr/loca

  • Linux系统命令中screen命令详解

    前言 对于执行长时间命令(如大文件运输)而言,为了不让它终止,都会开启一个远程登陆会话窗口来单独运行这样的命令.在此期间,不能关闭远程登录会话窗口或者断开连接,否则前功尽弃.这时候screen命令就派上用场了. Screen是一款由GNU计划开发的用于命令行终端切换的自由软件.用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换.GNU Screen可以看作是窗口管理器的命令行界面版本.它提供了统一的管理多个会话的界面和相应的功能. 下面来介绍下我最常用的screen命令(仅限

  • 解决python nohup linux 后台运行输出的问题

    遇到问题 nohup python flush.py & 这样运行,生成了nohup.out文件,但是内容始终是空的,试了半天也不行.浪费了不少时间. 原因 python的输出又缓冲,导致out.log并不能够马上看到输出. -u 参数,使得python不启用缓冲. 解决 nohup python -u flush.py > flush.log 2>&1 & 终于好了! 以上这篇解决python nohup linux 后台运行输出的问题就是小编分享给大家的全部内容了,

  • linux小技巧之利用screen管理你的远程会话

    前言 大家是不是经常需要 SSH 或者 telent 远程登录到 Linux 服务器?是不是经常为一些长时间运行的任务而头疼,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了.必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了. 元凶:SIGHUP 信号 让我们来看看为什么关掉窗口/断开连接会使得正在运行的程序死掉. 在Linux/Unix中,有这样几个概念: 进程组(process gr

  • 浅析Linux中使用nohup及screen运行后台任务的示例和区别

    使用SSH终端(比如putty,xshell)连接Linux服务器上运行比较耗时任务,可能需要几个小时甚至几天才能完成,这时候终端被占据,我们还要做其他的任务呢,所以需要将这一类耗时任务放到后台来跑,只需要记录好日志就行了,有下面这些常用方法来实现这个需求. command & 在终端输入command &运行,这时候使用Ctrl + C中止命令将会失效,因为对&后台运行SIGINT1信号免疫,程序会继续运行. 但如果你直接关掉终端, 进程将跟着中止. 可见,使用&后台运行

  • 在Linux中安装ASPNET.Core3.0运行时的示例代码

    # 以下示例适用于x64位runtime v3.0.0 mkdir /runtimes cd /runtimes wget https://download.visualstudio.microsoft.com/download/pr/b0c44e05-b7a1-4221-94ec-a0c0d3a11eed/afc61567dd6db8f097e244871889458c/aspnetcore-runtime-3.0.0-linux-x64.tar.gz mkdir aspnetcore-run

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

    目录 前言 nohup是什么 nohup语法规则 nohup使用方法 后台运行命令 标准输出重定向到文件 标准错误输出重定向到文件 将标准输出和标准错误输出都重定向到文件 nohup后台进程管理 总结 前言 当我们在Linux或Unix系统上执行一个长时间运行的命令或脚本时,我们通常会遇到一个问题,那就是在终端关闭或者退出后,该进程也会随之停止运行.在这种情况下,我们需要一种方式来让进程在后台运行,而不受终端关闭的影响.这时,nohup命令就派上用场了. nohup是什么 nohup是Linux

  • 在Linux中查看及终止正在运行的后台程序方法

    linux 任务管理-后台运行与终止 fg.bg.jobs.&.ctrl + z命令 一. & 加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &, 二.ctrl + z 可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行 三.jobs 查看当前有多少在后台运行的命令 jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境

  • 浅析Linux中的零拷贝技术的使用

    本文探讨Linux中主要的几种零拷贝技术以及零拷贝技术适用的场景.为了迅速建立起零拷贝的概念,我们拿一个常用的场景进行引入: 引文## 在写一个服务端程序时(Web Server或者文件服务器),文件下载是一个基本功能.这时候服务端的任务是:将服务端主机磁盘中的文件不做修改地从已连接的socket发出去,我们通常用下面的代码完成: while((n = read(diskfd, buf, BUF_SIZE)) > 0) write(sockfd, buf , n); 基本操作就是循环的从磁盘读入

  • Linux中进程在后台可靠运行的方法总结

    这篇文章主要给大家在讲述了在Linux中让一个进程在后台稳定运行的技巧和方法,总结如下: 我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题. nohup/setsid/& 场景: 如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢? 解决

  • 浅析Linux中vsftpd服务配置(匿名,用户,虚拟用户)

    vsftpd概述 vsftpd 是"very secure FTP daemon"的缩写,安全性是它的一个最大的特点.vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux.BSD.Solaris. HP-UNIX等系统上面,是一个完全免费的.开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征. 特点 非常高的安全性需求.带宽限制.良好的可伸缩性.可创建虚拟用户.支持IPv6.速率高 小巧轻快,安全易用. ftp.sftp.

  • 浅析Linux中重定向问题

    简介 在计算领域,重定向是大多数命令行解释器所具有的功能,包括各种可以将标准流重定向用户规定地点的Unix shells.类Unix操作系统的程序可以通过dup2系统调用完成重定向,或者通过缺少一些灵活性但是更高一级层次的freopen(3)和popen来完成. 1重定向 1.1      重定向符号 >               输出重定向到一个文件或设备 覆盖原来的文件 >!              输出重定向到一个文件或设备 强制覆盖原来的文件 >>           

  • 浅析Linux中crontab任务调度

    一.创建调度任务 指令 crontab -e 进入当前用户编辑界面 crontab -u 用户名 -e 进入指定用户编辑界面 进入crontab任务编辑界面 任务编写格式 #每分钟执行查看一次/ect目录,把目录内容写进/tml/a.txt下 */ 1 * * * * ll /etc >> /tmp/a.text #crontab对象 +指令 #多个任务同时执行 #crontab对象  指令1&指令2 crontab对象参数 第一个* 表示分钟 范围0-59 第二个* 表示小时 范围:

  • 统计Linux 中文件和文件夹/目录的数量(示例代码)

    嗨,伙计们,今天我们再次带来一系列可以多方面帮助到你的复杂的命令. 通过操作命令,可以帮助您计数当前目录中的文件和目录.递归计数,统计特定用户创建的文件列表等. 在本教程中,我们将向您展示如何使用多个命令,并使用 ls.egrep.wc 和 find 命令执行一些高级操作. 下面的命令将可用在多个方面. 为了实验,我打算总共创建 7 个文件和 2 个文件夹(5 个常规文件和 2 个隐藏文件). 下面的 tree 命令的输出清楚的展示了文件和文件夹列表. # tree -a /opt /opt ├

随机推荐