在linux机器上工作,大多都是本地电脑通过xshell之类的工具连接到远端的linux主机上。当我们在终端或者控制台工作时,不希望由于运行比较耗时的作业而占用了当前屏幕;
也可能我们的电脑和远端的linux主机之间的网络不稳定,我们连接的终端随时可能断开,终端断开时,我们执行的命令也会终止,这是我们不希望的;
也可能我们启动的作业非常耗时了,快要下班了,等不及这个作业完成了,必须回家做饭吃,嗯,这个很重要,此时要是直接关闭终端,那么这个作业就会终止,以前的计算就白费了,这也是我们不希望的。
如何解决这些问题呢,下面一个一个来看。


解决方法:
我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。


hangup 名称的来由
在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯。当用户 logout 时,modem 就会挂断(hang up)电话。 同理,当 modem 断开连接时,就会给终端发送 hangup 信号来通知其关闭所有子进程。


& – 让命令后台运行

当我们在终端或者控制台工作时,如何让耗时的作业而不再占用了当前屏幕?
当在前台运行某个作业时,终端被该作业占据,此时可以在命令后面加上&实现后台运行。例如:

command > output.txt 2>&1 &

注意: 这个命令若需要和用户交互,就不能放在后台执行,因为这样你的命令就会卡在交互的地方;
命令运行可能输出结果到屏幕上,这样就干扰你工作,所以上面命令使用了“> output.txt 2>&1”,把结果重定向输出到指定文件中。

特别注意,使用这种方式时,若由于网络原因或者我们主动断开终端时,这个命令也会终止;
所以确信终端短时间内不会断开时,这种方式还是挺好用的。


nohup – 让提交的命令忽略hangup信号

使用&命令后,作业被提交到后台运行,当前终端/控制台没有被占用,但是一旦把当前终端关掉(退出账户时),提交的作业就会停止运行。nohup命令可以在你退出账户之后继续运行相应的进程。nohup就是不挂起(no hang up)的意思。
命令的一般形式为:

nohup command > output.txt 2>&1 &

注:使用了nohup之后,很多人就不管了,其实这样有可能在当前账户非正常退出或者结束的时候,命令还是
会自己结束的。所以在使用nohup后台运行命令之后,需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行。


disown – 脱离终端的子进程

我们已经知道,如果事先在命令前加上 nohup就可以避免 HUP信号的影响。但是如果我们未加任何处理就已经提交了命令,该如何补救才能让它避免 HUP 信号的影响呢?
这时想加nohup已经为时已晚,只能通过作业调度和disown来解决这个问题。


  • 使用 ctrl + z 把这个命令挂起(Suspend)
  • 使用 jobs 命令查看后端命令,只是你会发现这个命令是 stopped 状态
  • 使用 bg %N (注意,这个N是对应的编号),让这个命令后端执行
  • 再次使用 jobs 命令查看,发现那个命令的状态就变为 running 了,就是已经是后台执行了
  • 使用 disown -h %N,使这个进程运行在新的会话里,从而成为不属于此终端的子进程
  • exit正常退出这个终端

参考:https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/

linux 使进程后台运行:/nohup/disown相关推荐

  1. linux断开会话不中断进程,Linux让进程后台运行且连接断开不影响(nohup、setsid、disown、screen)...

    背景 由于Linux的某些特性,例如可以多用户同时登陆.服务器运用广泛等,我们通常会用ssh去连接一台远程的Linux主机,或者在开发机上(本机)开多个terminal.而在我们运行一个耗时较长的任务 ...

  2. Linux终端进程后台运行与前后台切换

    1 Linux终端常用命令 pwd 显示当前工作路径 cd 目标目录 改变路径,'.'表示当前目录,'-'表示上一级目录 举例: cd ../ cd A/B/C/ ls list的缩写,列出当前路径下 ...

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

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

  4. Linux 进程后台运行

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

  5. linux使得python后台运行,linux 下后台运行python脚本

    &符号 这两天要在服务器端一直运行一个Python脚本,当然就想到了在命令后面加&符号 $ python /data/python/server.py >python.log & ...

  6. Linux系统中后台运行java项目jar包指令

    Linux系统中后台运行java项目jar包指令 windows环境下后台运行jar包程序: https://blog.csdn.net/qq_36763419/article/details/109 ...

  7. linux shell 在后台运行命令

    linux shell 在后台运行命令: http://blog.csdn.net/CAIYUNFREEDOM/article/details/6339390 http://blog.sina.com ...

  8. Linux中vue后台运行

    Linux中vue后台运行 只会简单的尝试 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设 ...

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

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

最新文章

  1. Redis持久化 - RDB和AOF
  2. 模板 - 计算几何相关公式大全
  3. Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别...
  4. Java 代码的基本知识
  5. gateway调用后台系统时选择RFC的决定逻辑
  6. 坐标系转换工具_借助工具实现不同坐标系之间的转换
  7. D. Solve The Maze Codeforces Round #648 (Div. 2)
  8. c/c++多线程模拟系统资源分配(并通过银行家算法避免死锁产生)
  9. 【Python】元组和列表相关知识总结
  10. Java工作笔记-使用CXF接入及创建WebService
  11. Ubuntu好用的软件推荐
  12. IPv6笔记-地址结构与分类
  13. FabFilter Pro-R 混响效果器
  14. 揭秘月薪最容易过万的工作,男默女泪!
  15. win7安全模式卡在Classpnp.sys文件的解决办法
  16. 【实验技术笔记】细胞表型检测之细胞周期(PI 染色)
  17. 如何实现 React 中的状态自动保存?
  18. CDR2018软件插件补丁简体中文版免费下载安装教程
  19. openbsd_OpenBSD与Linux,Gentoo与Microsoft相遇
  20. NES模拟器源码阅读

热门文章

  1. Web OA系统软件需求说明书
  2. 个人对码表的理解(ASCII,GBK,Unicode,UTF-8等)。
  3. 手把手教做新疆大盘鸡[图]
  4. ifeq makefile 或语句_makefile ifeq 语句
  5. Python Turtle库画树
  6. 解决:ImportError: No module named ‘StringIO‘
  7. 服务器维护工作累吗,运维工程师的上班工作环境是什麽样的??是每天待..._环境评价师_帮考网...
  8. 教育学院计算机试卷答案,北京语言大学网络教育学院计算机文化基础(本)模拟试卷(共3份,含答案)...
  9. Raft协议-流程演示
  10. 用Hibernate和Struts2+jsp实现分页查询、修改删除