nohup,disown和&是Linux中用来进行作业控制的命令,它们都与作业的执行过程控制有关系。这三个家伙主要的区别在于对作业执行的调度动作上,区别还是很明显的。

一、先说说nohup

老胡打算先说nohup的主要原因是想说造成nohup、disown和&容易混淆的原因:HUP信号。Linux的shell在远程登录断开和用户登出时,会收到系统发送的HUP信号,然后就会陆续关闭它的子进程。无论我们是在本机的终端上登录的shell,还是远程登录的shell,在这个shell里面运行的所有命令都是它的子进程。如果在shell收到HUP的时候,我们不想自己运行的脚本或者命令被杀死,就需要用到nohup:

nohup 命令或脚本

这样一来,nohup后面的命令就会无视shell发来的HUP信号继续运行直到结束。

nohup会将紧随其后的命令或者脚本的标准输出重定向到

nohup.out

文件,一般我们使用它的时候都会将其重定向到自己定义的文件名:

nohup 命令或脚本 > filename 2>&1

通常我们使用nohup的时候,末尾都会加一个&一起使用。在上面的截图中可以看到,nohup后面的命令依然是当前shell的子进程。nohup不会将执行命令的作业与shell断开联系。

二、&都干了些什么

如果将一个命令后面加上&来执行,那么这条命令会被提交到作业列表,并且能够响应标准输入,命令的输出结果也能够输出到标准输出流和标准错误流:

使用jobs命令来查看作业列表可以看到这个任务的身影:

如果使用()将需要放置在后台执行的命令括起来的话,jobs就查不到这条作业了。

(ping www.baidu.com & )

原因是()以子shell进程运行,其父进程是系统进程init:

所以&与()配合使用,可以将命令作为init的子进程执行。

三、disown的作用

disown主要用于作业列表的控制。它可以根据作业号,将指定的作业从作业列表中删除,并将作业进程转为init的子进程。例如:

disown -h %1

就是将作业号为1的作业从作业列表中删除,在shell退出的时候将其作为init的子进程继续执行。

实际的应用中,比如我们在运行一条用时比较长的命令的时候,忽然临时需要登出系统或者关闭shell,而在当时运行这个命令时没有考虑到要提交为作业放到后台运行。可以先用Ctrl+z来挂起当前进程,使用jobs获得作业号,然后再使用disown来切断这个命令与当前shell进程的联系,这样就可以避免shell关闭的时候会中断命令的执行。

总结一下,nohup,disown和&之间的区别可以用作业调度的能力来看,排序如下:

disown>&>nohup。nohup只能让命令在执行时忽略shell传来的HUP信号,使命令能够无视shell的退出继续执行完毕;disown可以随意调度正在执行的作业,使之与shell断开联系从而避免被HUP信号终止;&配合()进行子shell调用可以实现将命令作为init的子进程执行。

nohup,disown和的区别相关推荐

  1. linux 使进程后台运行:/nohup/disown

    在linux机器上工作,大多都是本地电脑通过xshell之类的工具连接到远端的linux主机上.当我们在终端或者控制台工作时,不希望由于运行比较耗时的作业而占用了当前屏幕: 也可能我们的电脑和远端的l ...

  2. Linux让进程(正在运行)在后台运行:nohup//disown/screen/Tmux

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

  3. linux的nohup disown setsid screen

    ```nohup 可以将进程挂起 帐号退出时不受影响 nohup cp -r a b/ [>/~/cp.log] & setsid 作用类似于nohup swtsid cp -r a b ...

  4. /a.out , nohut ./a.out , nohup ./a.out 的区别

    首先,先看个小程序 生成可执行程序a.out, 下面, 我会在我的linux机器上进行测试!!! &的意思是在后台运行, 什么意思呢? 意思是说, 当你在执行 ./a.out & 的时 ...

  5. nohup command > out.file 2>1 命令详解

    nohup hup是hang up的缩写,是挂断.挂起的意思,而顾名思义,nohup就是不挂断.不挂起的意思.在 Unix 的早期版本中,每个终端都会通过modem和系统通讯.当用户 logout 时 ...

  6. Linux 后台运行程序方法总结

      在用服务器跑数据的时候经常会遇到数据量大,速度慢的情况,动不动需要用好几天甚至上十天,但电脑总不能好几天不关终端,且保证不断网吧.所以这时候我们就需要将程序放到后台运行,不依赖于终端.关于原理,我 ...

  7. 使用Hexo搭建个人博客的终极资料

    # 一.前言 Hexo 是一个基于 NodeJs 博客框架,可以快速的帮我们搭建一个博客系统,Hexo使用的是Markdown(下文简称MD)解析文章的,在几秒内即可利用靓丽的主体生成静态网页. 推荐 ...

  8. 关于SIGHUP信号的讨论

    参考链接: <Linux终端关闭后台进程也结束原因分析和nohup的使用> <理解SIGHUP产生的过程> <Linux shell 退出后任务仍然运行引发的探究> ...

  9. Linux服务器运维常用命令(持续更新)

    1.ip addr   查看本机IP地址 Windows上查看IP地址是ipconfig, Linux上是ifconfig,但是Linux上还有一个命令叫ip addr可以查看IP地址. 2.serv ...

最新文章

  1. 华为员工实力炫富,工作六年一套房一辆豪车,存款六十万
  2. 月薪3万的程序员都避开了哪些坑
  3. 查询存在表1但不存在表2的所有数据
  4. SecureCRT录制的安卓电视切换台脚本
  5. python网络编程能做什么_python网络编程——什么是socket?
  6. linux常用命令技巧--更新中
  7. Python爬虫解析网页的4种方式 值得收藏
  8. 你准备好了吗,江湖来了
  9. Linux学习笔记019---Centos7下安装Maven
  10. ASM相关概念及实例创建
  11. 海狮号水下机器人_美军派出动物特种兵搜寻失踪水下机器人
  12. gitlab 项目分支管理的一种策略
  13. snmp trap 如何在浏览器中_SNMP Trap的功能介绍
  14. mumu模拟器点击无响应_常用安卓模拟器介绍?PC模拟器哪个好用
  15. 计算机管理中看不到iis,win10找不到“internet信息服务(IIS)管理器”怎么办
  16. 使用plf更新Mandriva系统
  17. xss(跨站脚本攻击)详解
  18. 山东省公安厅交通管理局异地容灾系统运维、综合应用平台复制库升级项目
  19. 【教程】阿里云服务器挂载硬盘(其中硬盘为从快照中创建的云硬盘)
  20. python游戏编程

热门文章

  1. 堆栈溢出一般是由什么原因导致
  2. 快排(java实现)
  3. K8s中Pod生命周期和重启策略
  4. Python3网络爬虫教程2——urlopen的返回对象
  5. 王者服务器正在维护中是什么意思,王者营地转移系统维护中是什么意思
  6. Ymodem协议要点
  7. Cocos Creator 3D 麒麟子回来了!(入门心法)
  8. FPGA从入门到精通(8)-BRAM
  9. 计算机学院大学毕业晚会标题,“告白青春,感谢有你” 计算机学院2018届毕业晚会圆满举行...
  10. 男子用计算机rap劫匪,连Lex都在推荐的新番《催眠麦克风》直接一首rap将抢劫犯给rap崩溃!...