为什么80%的码农都做不了架构师?>>>   

http://linux.ctocio.com.cn/179/12162679.shtml
我们经常会碰到这样的问题,用telnet/ssh登录了远程的Linux服务器,运行了一些耗时较长的任务,结果却由于网络的不稳定导致任务中途失败。 如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题。
nohup/setsid/&
场景:如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢?hangup 名称的来由在 Unix 的早期版本中,每个终端都会通过modem和系统通讯。当用户logout 时,modem 就会挂断(hang up)电话。同理,当modem 断开连接时,就会给终端发送hangup 信号来通知其关闭所有子进程。
解决方法:我们知道,当用户注销(logout)或者网络断开时,终端会收到HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略HUP信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。
1. nohup
nohup 无疑是我们首先想到的办法。 顾名思义,nohup 的用途就是让提交的命令忽略hangup信号。让我们先来看一下nohup的帮助信息:NOHUP(1) User Commands NOHUP(1)
NAME nohup - run a command immune to hangups, with output to a non-tty
SYNOPSIS nohup COMMAND [ARG]……
nohup OPTION
DESCRIPTION Run COMMAND, ignoring hangup signals.
——help display this help and exit
——version output version information and exit
可见,nohup 的使用是十分方便的,只需在要处理的命令前加上nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上"&"来将命令同时放入后台运行,也可用">filename 2>&1"来更改缺省的重定向文件名。
nohup 示例
# nohup ping www.ibm.com &
[1] 3059 nohup: appending output to `nohup.out' 
# ps -ef |grep 3059
root 3059 984 0 21:06 pts/3 00:00:00 ping www.ibm.com root 3067 984 0 21:06 pts/3 00:00:00
grep 3059
2. setsid
nohup 无疑能通过忽略HUP 信号来使我们的进程避免中途被中断,但 如果我们换个角度思考,如果我们的进程不属于接受 HUP 信号的终端的子进程,那么自然也就不会受到HUP信号的影响了。setsid 就能帮助我们做到这一点。让我们先来看一下setsid 的帮助信息:SETSID(8) Linux Programmer‘s Manual SETSID(8)
NAME setsid - run a program in a new session
SYNOPSIS setsid program [ arg …… ]
DESCRIPTION setsid runs a program in a new session.
可见 setsid 的使用也是非常方便的,也只需在要处理的命令前加上 setsid 即可。
setsid 示例
# setsid ping www.ibm.com
# ps -ef |grep www.ibm.com
root 31094 1 0 07:28 ? 00:00:00 ping www.ibm.com root 31102 29217 0 07:29 pts/4 00:00:00
grep www.ibm.com
值得注意的是,上例中我们的进程 ID(PID)为31094, 而它的父ID(PPID)为1(即为init 进程ID),并不是当前终端的进程ID.请将此例与nohup例中的父 ID 做比较。
3. &
这里还有一个关于subshell 的小技巧。我们知道,将一个或多个命名包含在“()”中就能让这些命令在子 shell 中运行中,从而扩展出很多有趣的功能,我们现在要讨论的就是其中之一。
当我们将"&"也放入“()”内之后,我们就会发现所提交的作业并不在作业列表中,也就是说,是无法通过jobs来查看的。让我们来看看为什么这样就能躲过 HUP 信号的影响吧。
subshell 示例
# (ping www.ibm.com &)
# ps -ef |grep www.ibm.com root 16270 1 0 14:13 pts/4 00:00:00 ping www.ibm.com root 16278 15362 0 14:13 pts/4 00:00:00
grep www.ibm.com
从上例中可以看出, 新提交的进程的父ID(PPID)为1(init 进程的PID),并不是当前终端的进程ID。因此并不属于当前终端的子进程,从而也就不会受到当前终端的HUP信号的影响了。

转载于:https://my.oschina.net/kuafu/blog/40744

转-Linux进程后台运行的几种方法相关推荐

  1. linux进程后台运行的几种方法 - nohup/setsid//disown/screen

    我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开 ...

  2. 用以促学——Linux进程后台运行的原理、方法、比较及其实现

    用以促学--Linux进程后台运行的原理.方法.比较及其实现 文章目录 用以促学--Linux进程后台运行的原理.方法.比较及其实现 前言 相关基础知识 应用场景 问题所在 linux概念说明 ses ...

  3. Linux 进程后台运行的几种方式 screen

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/80580779 本文出自[赵彦军的博客] screen是Linux窗口管理器,用户可 ...

  4. Linux 进程后台运行

    Linux 进程后台运行 1.进程在当前终端后台运行.(关闭终端后进程自动退出) sh test.sh &注:运行进程后跟 "&" 2.进程长期后台运行不受终端关闭 ...

  5. tmux命令启动MySQL_程序后台运行的几种方法

    默认情况下,我们自己写的程序在运行时候会把当前 shell 给占据了,这时候想要在执行其他命令比较笨的方法就是再登陆一次创建一个会话:还有时候我们希望程序退出后能继续运行,像 mysql 那样. 下面 ...

  6. Linux进程在后台运行的几种方法

    目录 nohup / setsid / & disown screen 总结 我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, ...

  7. linux进程suspended状态,linux进程后台运行

    在linux上启动Web服务,当退出终端后,Web服务进程也会随着关闭.产生这种问题的原因在于,当用户注销或者网络断开后,终端后收到挂断信号(SIGHUP),并向子进程广播SIGHUP信号,子进程收到 ...

  8. Linux——让程序在后台运行(四种方法+使用推荐)

    目录 一.第一种方法(加"&"符号) 二.第二种方法(nohup命令)  三.第三种方法(screen命令)   四.第四种方法(systemctl命令)   五.总结 六 ...

  9. 让程序后台运行的几种方法

    我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开 ...

最新文章

  1. 黑马lavarel教程---6、简单验证
  2. 1/r单中心双电子积分Li+
  3. C++如何把字符串转化为数字?
  4. Windows 下用 SecureCRT 连接 VirtualBox 中的 Ubuntu
  5. 常用于评价回归模型优劣的统计量包括( )。_第四十一讲 R-判断回归模型性能的指标...
  6. 前端学习(2536) request和response
  7. canvas基础之旅
  8. 湖南工业大学计算机专硕调剂,2020考研调剂:湖南工业大学生物信息实验室2020考研调剂信息...
  9. 重新编译hadoop-2.7.2-src的native以支持Snappy解压压缩库
  10. 华为机试HJ100:等差数列
  11. java获取光标位置_javastscript获取光标位置
  12. Python爬虫错误重试,超时处理
  13. 【指纹识别】基于matlab GUI指纹打卡系统【含Matlab源码 867期】
  14. ic卡识别程序c语言,如何读写接触式IC卡
  15. 在Win10上布置定时任务,运行Python脚本备份文件到FTP远程服务器
  16. 本科学经济还是学数学和计算机,如果考研想往经管类方向,学习数学类,还是数学与应用数学, 这两个专业有什么不同...
  17. java 中文星期表示_java之获得中文星期几
  18. 6C.项链(C++)
  19. J2ME--丰富多彩的领域中生机勃勃的技术
  20. 真人女神换脸二次元女神

热门文章

  1. 黑马程序员--IDEA版本2018Java基础班+就业班大牛编程吧
  2. java自动输入验证码_【自动化测试】使用Java+selenium填写验证码成功登录
  3. AtCoder Beginner Contest 234 G - Divide a Sequence
  4. 惋惜 | 北京这所211大学清退59名博士生!
  5. 安卓调起高德百度第三方地图进行导航
  6. 小红书携手HMS Core,畅玩高清视界,种草美好生活
  7. HTML如何去掉链接下划线
  8. 蓝牙连接音箱抓空包、HCI、sitalog
  9. proxy(初级运用)
  10. error C2899: 不能在模板声明之外使用类型名称