1.问题的引入

程序员最不能容忍的是在使用终端的时候往往因为网络,关闭屏幕,执行CTRL+C等原因造成ssh断开造成正在运行程序退出,使得我们的工作功亏一篑。

其背后的主要原因在于上述的相关操作,shell默认会发送中断信号给该终端session关联的进程,从而导致进程跟随终端退出,为了弄清这个问题我们首先要了解两种中断信号:

1)sigint:signal interrupt,ctrl+c会发送此信号,主动关闭程序

2)sighup: signal hang up,关闭终端,网络断线,关闭屏幕会发送此挂断信号。

今天就给大家介绍linux中几种后台任务的执行方法避免上述问题。

2 & 符号

这是一种把 &放在执行命令最后,使启动的程序忽略sigint信号,此时执行ctrl+c关闭就不会关闭此进程,但是当屏幕关闭,断网仍然会造成进程退出。

sh test.sh &

3.nohup指令

nohup(no hang up),意思就是不挂断运行,用nohup运行命令可以使命令永久执行下去,和用户终端没有关系,断开SSH不影响运行,nohup捕获了SIGHUP,并做了忽略处理,因此当屏幕关闭,断网等造成ssh中断时进程不会退出。但是ctrl+c可以关闭关闭该进程。因此大多数情况同时使用nohup和&启动的程序,ctrl+c和关闭终端都无法关闭。在缺省情况下所有输出都被重定向到一个名为nohup.out的文件中。

nohup指令基本使用格式:

nohup Command [ Arg ... ] [ & ]

举例

后台不中断执行./test.sh,stdout输出给out.log,stderr输出给err.log

nohup ./test.sh > out.log 2>err.log  &

相关的数字含义如下:

  • 0 – stdin (standard input),
  • 1 – stdout (standard output),显然 nohup command > out.log 等价于 nohup command 1> out.log,是缺省行为。
  • 2 – stderr (standard error)

可能你也会见到这种写法,其含义是把stderr也重定向给stdin

nohup ./test.sh > out.log 2>&1  &

4.ctrl + z、jobs、fg、bg

如果我们程序在启动的时候并没有使用&,nohup怎么办呢,难道我们需要先执行ctrl + c将在前台执行的进程终止执行再重新启动吗,显然有好的方法!

4.1 ctrl + z

将一个正在前台执行的作业进程放到后台,并且暂停,用术语讲就是挂起,执行后如下:

[1]+ Stopped ./test.sh

4.2 jobs

查看当前有多少在后台运行的命令,[jobnumber] 就是作业号。

jobs
[1]+ Stopped ./test.sh
[2]+ Running ./test2.sh &

4.4 bg

将后台中暂停(挂起)的作业进程继续运行,例如把1号作业(./test.sh) 放到后台运行,注意看已经带了&

bg 1
[1]+ ./test.sh  &

4.3fg

将后台中的作业进程调至前台继续运行,例如把2号作业(./test2.sh &)调至前台运行

fg 2
./test2.sh

5.screen命令5.1 介绍

如果说上面的方法是通过linux 相关本身命令实现了前后台任务调度,那么screen就提供了另外一种思路。

不说人话的版本:GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。

说人话的版本: 我们可以粗略地认为screen是一个虚拟终端软件,直接在linux系统里面启动了另外一个后台程序接管(维持)了你的终端会话,当你直接连接的终端ssh断开时他仍然让程序认为你的ssh持续链接着,这样也就不会出现进程接收到中断信号而退出。

5.2 安装

yum install screen

5.3使用

1)新建会话

screen -S yourname -> 新建一个叫yourname的session

2) 列出当前所有的session

screen -ls

3)恢复会话(回到yourname这个session)

screen -r yourname

4) detach某个session

screen -d yourname -> 远程detach某个session screen -d -r yourname -> 结束当前session并回到yourname这个session

5)删除会话

screen -S pid-X quit

linux下几种运行后台任务的方法相关推荐

  1. Linux下两种实用自动交互方法

    在网上搜索一大堆以后我总结到了2个Linux交互的方法. 第一个方法 – 管道法 这个办法不是所有的地方都有用,但是呢他非常的简单方便,不需要装第三方软件的支持,在一些命令比如passwd上就非常有用 ...

  2. linux系统打开远程端口,linux下3种检测远程端口是否打开的方法

    原标题:linux下3种检测远程端口是否打开的方法 方法一. telnet 常用telnet ip port方式测试远程主机端口是否打开. 方法二. nmap nmap ip -p port 测试端口 ...

  3. Linux下找出吃内存的方法总结

    linux下查询进程占用的内存方法总结,假设现在有一个「php-cgi」的进程 ,进程id为「25282」.现在想要查询该进程占用的内存大小.linux命令行下有很多的工具进行查看,现总结常见的几种方 ...

  4. linux安装ati工具,Linux下ATI驱动安装傻瓜安装方法

    Linux下ATI驱动安装傻瓜安装方法 发布时间:2006-01-04 12:58:15来源:红联作者:zz123 菜鸟我刚刚接触Debian不久(其实时间也不短了,但是没有深研究),在各位前辈的指导 ...

  5. 批量修改linux服务器密码,Linux下批量修改服务器用户密码方法步骤

    Linux下批量修改服务器用户密码方法步骤 密码快要过期.由于机器数量众多,因此采用批量修改密码的方式来进行处理. 下面是具体步骤: 1.配置ssh免key # ssh-keygen -t rsa - ...

  6. linux sd卡测速工具下载,Linux下3种常用的网络测速工具

    原标题:Linux下3种常用的网络测速工具 不管你用的是什么操作系统,网速都是你非常关心的一个性能指标,毕竟,谁都不想看个视频结果网速卡到你怀疑人生.本文介绍三个 Linux 命令行下的网络测速工具, ...

  7. linux查看mysql连接日志文件,linux下查看mysql日志文件的方法

    查看mysql日志方法: mysql默认不允许我们查看日志.需要更改一些设置 1 vi 更改配置文件 允许用户查看日志文件 sudo vi /etc/mysql/mysql.conf.d/mysqld ...

  8. Linux下几种RTP协议实现的比较和JRTPLIB编程讲解

    流媒体指的是在网络中使用流技术传输的连续时基媒体,其特点是在播放前不需要下载整个文件,而是采用边下载边播放的方式,它是视频会议. IP电话等应用场合的技术基础.RTP是进行实时流媒体传输的标准协议和关 ...

  9. Linux下分割与合并文件的方法

    Linux下分割与合并文件的方法 切割合并文件在linux下用split和cat就可以完成.下面举些实例进行说明. 1.文件切割 文件切割模式分为两种: 文本文件 二进制模式. 1.1文本模式 文本模 ...

最新文章

  1. opencv undefined reference to symbol '_ZN2c...异常
  2. 同一个Spring-AOP的坑,我一天踩了两次,深坑啊
  3. 在ThoughtWorks工作两个多月的总结
  4. 如何把 DropDownList 某一个 Item 的 Text 改成粗体 ?
  5. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(六)完美移动
  6. TomCat JDK环境变量
  7. phpcmsV9后台入口安全问题
  8. Python自动化二--jmeter分布式测试,抓包,python语法基本介绍
  9. 《更友好的网站url设计》
  10. asp判断是否移动端_ASP判断当前访问的是PC端还是移动设备端
  11. python计数器Count
  12. VC里面的钩子程序HOOK
  13. 电务段子系统网络管理服务器,CSM-TD铁路电务管理信息系统
  14. 分享大三改进后的python写的【银行管理系统】,超详细 【内附源码】
  15. 怎样快速打出初中常用的化学反应方程式
  16. 思科路由器和交换机的硬件结构
  17. 你租的房子遇 “坑” 了么?
  18. Android 单个指定蓝牙设备通讯流程
  19. Java基础:如何在IDEA中查看依赖关系
  20. Safari无法验证网站身份

热门文章

  1. pycharm 如何跳转光标上次查看的位置 ctrl+alt+(←→)(前进和返回)
  2. python map(function, iterable, ...) 内置函数的用法 (序列迭代调用并返回)
  3. 学习Pygame和巩固Python——画颜色~
  4. Python使用matplotlib画图,设置曲线颜色、类型及标记
  5. 幽暗统领 树的重心 牛客白月赛44
  6. CanalAdapter启动过程分析(源码详解)
  7. Netty原理五:ChannelFuture、DefaultChannelPromise对象解析
  8. Git 基本操作教程
  9. ospf多区域配置为什么ping不通_「实战」动态路由多区域 OSPF 基本配置,一分钟了解下...
  10. error: C3861: “pcap_open”: 找不到标识符