#每日一记#Linux下几种运行后台任务的方法
  

cyq 331

{{ttag.title}}
今天就给大家介绍linux中几种后台任务的执行方法避免上述问题。
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.3 bg
将后台中暂停(挂起)的作业进程继续运行,例如把1号作业(./test.sh) 放到后台运行,注意看已经带了&
bg 1  [1]+ ./test.sh  &
4.4 fg
将后台中的作业进程调至前台继续运行,例如把2号作业(./test2.sh &)调至前台运行
fg 2   ./test2.sh5.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

打赏鼓励作者,期待更多好文!

打赏
2人已打赏

Hacking 发表于 2022-5-31 09:32
  


感谢分享,有助于工作,学习了!!!
dhf 发表于 2022-6-1 10:19
  
每日打卡学习,感谢分享,学习了!!!
发表新帖
热门标签
全部标签>
每日一问
技术盲盒
技术笔记
干货满满
技术咨询
新版本体验
GIF动图学习
功能体验
产品连连看
标准化排查
自助服务平台操作指引
2023技术争霸赛专题
运维工具
通用技术
秒懂零信任
技术晨报
信服课堂视频
用户认证
安装部署配置
深信服技术支持平台
安全攻防
SDP百科
设备维护
社区帮助指南
答题自测
每日一记
玩转零信任
畅聊IT
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
上网策略
测试报告
日志审计
问题分析处理
流量管理
云计算知识
原创分享
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选

本版版主

12
185
6

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人