Linux下系统后台运行的方法讲解
发布时间 - 2017-08-22 00:00:00 点击率:次我们经常会碰到这样的问题,想要在linux 服务器运行一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?
下面列举了三种方法,可以很方便的满足上述需求。
问题分析:
我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。
三种解决办法:
1. nohup
nohup 无疑是我们首先想到的办法。顾名思义,nohup 的用途就是让提交的命令忽略 hangup 信号。
nohup 的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上"&"来将命令同时放入后台运行,也可用">filename 2>&1"来更改缺省的重定向文件名。
nohup 示例
[root@pythontab ~]# nohup ping www. & [1] 3059 nohup: appending output to `nohup.out' [root@pythontab ~]# ps -ef |grep 3059 root 3059 984 0 15:06 pts/3 00:00:00 ping www. root 3067 984 0 15:06 pts/3 00:00:00 grep 3059 [root@pythontab ~]#
2。setsid
nohup 无疑能通过忽略 HUP 信号来使我们的进程避免中途被中断,但如果我们换个角度思考,如果我们的进程不属于接受 HUP 信号的终端的子进程,那么自然也就不会受到 HUP 信号的影响了。setsid 就能帮助我们做到这一点。
setsid 的使用也是非常方便的,也只需在要处理的命令前加上 setsid 即可。
setsid 示例
[root@pythontab ~]# setsid ping www. [root@pythontab ~]# ps -ef |grep www. root 31094 1 0 07:28 ? 00:00:00 ping www. root 31102 29217 0 07:29 pts/4 00:00:00 grep www. [root@pythontab ~]#
值得注意的是,上例中我们的进程 ID(PID)为31094,而它的父 ID(PPID)为1(即为 init 进程 ID),并不是当前终端的进程 ID。
3。& subshell
这里还有一个关于 subshell 的小技巧。我们知道,将一个或多个命名包含在“()”中就能让这些命令在子 shell 中运行中,从而扩展出很多有趣的功能,我们现在要讨论的就是其中之一。
当我们将"&"也放入“()”内之后,我们就会发现所提交的作业并不在作业列表中,也就是说,是无法通过jobs来查看的。让我们来看看为什么这样就能躲过 HUP 信号的影响吧。
subshell 示例
[root@pythontab ~]# (ping www. &) [root@pythontab ~]# ps -ef |grep www. root 16270 1 0 16:13 pts/4 00:00:00 ping www. root 16278 15362 0 16:13 pts/4 00:00:00 grep www. [root@pythontab ~]#
从上例中可以看出,新提交的进程的父 ID(PPID)为1(init 进程的 PID),并不是当前终端的进程 ID。因此并不属于当前终端的子进程,从而也就不会受到当前终端的 HUP 信号的影响了。
比较而言,我更喜欢用setsid,简单实用。当然,这里看大家喜好即可,效果上差别不大。
# linux
# 就能
# 也就
# 只需
# 三种
# 解决办法
# 中途
# 的是
# 重定向
# 就会
# 让我们
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
Laravel怎么调用外部API_Laravel Http Client客户端使用
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
如何在IIS7中新建站点?详细步骤解析
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
如何在阿里云域名上完成建站全流程?
Laravel如何实现多对多模型关联?(Eloquent教程)
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
Android自定义控件实现温度旋转按钮效果
如何撰写建站申请书?关键要点有哪些?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
米侠浏览器网页背景异常怎么办 米侠显示修复
googleplay官方入口在哪里_Google Play官方商店快速入口指南
香港服务器选型指南:免备案配置与高效建站方案解析
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
Java遍历集合的三种方式
微信小程序 scroll-view组件实现列表页实例代码
如何用景安虚拟主机手机版绑定域名建站?
网站建设保证美观性,需要考虑的几点问题!
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
个人网站制作流程图片大全,个人网站如何注销?
如何在阿里云服务器自主搭建网站?
Laravel storage目录权限问题_Laravel文件写入权限设置
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
Python文本处理实践_日志清洗解析【指导】
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
香港服务器如何优化才能显著提升网站加载速度?
如何用AI帮你把自己的生活经历写成一个有趣的故事?
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
公司网站制作价格怎么算,公司办个官网需要多少钱?
如何在宝塔面板中修改默认建站目录?
如何在 Pandas 中基于一列条件计算另一列的分组均值
iOS正则表达式验证手机号、邮箱、身份证号等
长沙企业网站制作哪家好,长沙水业集团官方网站?
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
UC浏览器如何设置启动页 UC浏览器启动页设置方法
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
如何挑选优质建站一级代理提升网站排名?
如何快速搭建支持数据库操作的智能建站平台?


ww.
root 16270 1 0 16:13 pts/4 00:00:00 ping www.
root 16278 15362 0 16:13 pts/4 00:00:00 grep www.
[root@pythontab ~]#