在 Linux 终端上执行命令的通常风格是简单地运行它并等待它正常退出,命令退出后,可以继续连续执行其他命令,这就是所谓的在前台运行命令。正如这个词所暗示的那样,您可以在终端上直观地看到命令的输出。
而有时候我们并不在意命令的输出,而是要求命令执行的同时,在终端执行其他任务,这时候就要用到后台运行命令,nohup&就是两个比较常用的后台运行命令。

  • 1.本节用到的其他知识
    • 1)重定向
    • 2)两种中断信号
  • 2.& 命令
  • 3.nohup 命令
  • 4.结合使用
  • 后记——screen

1.本节用到的其他知识

1)重定向

通常情况下我们想要后台挂起的任务都会产生输出打印在当前屏幕上,这会影响后面再当前shell执行其他操作,我们可以使用< << 重定向命令将输出日志进行转移。
重定向的具体知识详见这篇文章:commond >/dev/null 2>&1 命令详解

2)两种中断信号

关闭屏幕,执行CTRL+C等原因造成ssh断开造成正在运行程序退出,常常会使我们的工作功亏一篑。
其背后的主要原因在于上述的相关操作,shell默认会发送中断信号给该终端session关联的进程,从而导致进程跟随终端退出,为了弄清这个问题我们首先要了解两种中断信号:

  • sigint:signal interrupt,ctrl+c会发送此信号,主动关闭程序
  • sighup:signal hang up,关闭终端,网络断线,关闭屏幕会发送此挂断信号。

了解了程序退出的原因,接下来就是对这两种中断信号对应的解决办法。
用到的示例程序:test.sh

while true
doecho "I'm still here!"sleep 1
done

2.& 命令

&放在执行命令的最后,此时执行ctrl+c关闭就不会关闭此进程,但是当屏幕关闭、断网仍然会造成进程退出。
也就是免疫sigint信号,无法免疫sighup信号。

关闭当前shell会话,重新打开一个会话,查看进程会发现test.sh已经不在:

3.nohup 命令

nohup(no hang up),即不挂断运行,用nohup运行命令可以使命令永久执行下去,和用户终端没有关系,断开SSH不影响运行,nohup捕获了SIGHUP,并做了忽略处理,因此当屏幕关闭,断网等造成ssh中断时进程不会退出。但是ctrl+c可以关闭关闭该进程。
也就是也就是免疫sighup信号,无法免疫sigint信号。

此时关闭当前shell会话,在其他会话查看进程:
此时进程依旧存在。

还有一点需要提及,使用nohup默认会将标准输出重定向到~/nohuo.out文件中,shell窗口不在打印输出信息,此时我们读取一下nohup.out文件:

nohup.out可以自定义其他文件

nohup commond >file

4.结合使用

sigint sighup
& 免疫 不免疫
nohup 不免疫 免疫

既然两种命令分别对两种信号免疫,那将他们一起使用会是什么效果呢?执行 Ctrl + C
关闭当前会话,检测进程:刚刚显示的[1]403进程依旧存在,最强钉子户诞生!
此时想要关闭进程的话,只能使用kill命令杀死进程了:


后记——screen

使用nohup + & 的方法是比较常用的后台运行手段,但也有它的局限性,如果一个进程需要与用户进行交互,等待用户输入,那就无法使用nohup + & 的方法了。对于这个需求,我的解决办法是使用screen,篇幅问题,在这里只说一下简略使用方法,下一篇文章再进行具体介绍吧。
1)新建会话

screen -S screenname        #新建一个叫screenname的session

2) 列出当前所有的session

screen -ls

3)回到某个会话

screen -r screenname

4) detach某个session

screen -d screenname            #远程detach某个session
screen -d -r screenname         #结束当前session并回到screenname这个session

5)删除会话

screen -S pid-X quit

nohup ——Linux后台运行命令相关推荐

  1. linux+后台运行+nohup,Linux后台运行命令集(、fg、bg、jobs、nohup、ctrl + z)

    Linux后台运行命令集(&.fg.bg.jobs.nohup.ctrl + z) 1).& 命令或进程最后加上"&",可以把此操作放到后台执行: 2).c ...

  2. linux后台运行命令,nohup

    linux后台运行命令 1.& 当结束终端时,进程就会停止 command & 例子: ./test.sh & 2.nohup 为不挂起进程的意思 如下时会使得应用在关闭终端时 ...

  3. linux后台运行命令总结

    linux后台运行命令总结 问题: 我们有时候需要登录远程服务器跑运行时间非常长的脚本,这个时候你要让脚本后台运行,不然占着终端窗口看着不舒服.但万一网络不好,(比如我这儿的破校园网,高峰时几秒钟断一 ...

  4. linux后台运行命令

    当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件.对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨).为 ...

  5. linux系统让一个命令在后台运行,Linux——Linux后台运行命令详述

    本次主要讲述后台运行命令(crontab,at,&,nohup)及(*,?,[])等 • 设置c r o n t a b文件,并用它来提交作业. • 使用a t命令来提交作业. • 在后台提交 ...

  6. Linux后台运行命令 nohup command myout.file 21

    Linux命令后台运行 转自北国的雨,谢谢:http://www.cnblogs.com/lwm-1988/archive/2011/08/20/2147299.html 有两种方式: 1. comm ...

  7. linux后台运行命令screen的使用

    在我们通过终端或ssh连接服务器使用时候,有时候一个训练程序可能需要训练几天才能完成,但是我们的终端可能会在几个小时后自动断开,就会导致训练程序终止,解决方法就是使用screen工具: 先介绍scre ...

  8. linux后台运行命令和杀除命令

    1.ping 100.102.114.1 > 1.txt & #这时候已经在后台进行了 2.上面的命令敲完之后其实可以看到进程好和id和执行的命令 通过:kill %id         ...

  9. linux关闭后台运行命令,linux后台运行、关闭、查看后台任务常用命令

    一.& 加在一个命令的最后,可以把这个命令放到后台执行,如: [root@bqh-01 ~]# watch -n 3 "sh 1.sh"  #每3s在后台执行一次1.sh脚 ...

最新文章

  1. 风景这边独好的AI大年,百度亚马逊等巨头第一季度成绩单怎么样?
  2. Git_git的诞生
  3. VMware Workstation 中 用NAT 方式设置网络
  4. 如何下载python2.7.16_CENTOS6.5 安装PYTHON2.7.16
  5. 图解算法学习笔记(二): 选择排序
  6. LeetCode OJ Symmetric Tree 判断是否为对称树(AC代码)
  7. SpringMVC 的总结
  8. pythonrsv分割_大数据经验
  9. DriverMessageBean配置详解
  10. 【爬虫】selenium动态页面请求与模拟登录知乎
  11. word中编辑公式及公式编号的对齐设置
  12. eclipse python java_如何使用Eclipse使用Python导入Java类?
  13. 微信小程序wxml如何判断字符串中汉语某字符_如何获取别人微信小程序的源文件?...
  14. FinePrint双面打印设置
  15. instsrv.exe和srvany.exe将.exe文件注册为windows服务
  16. capacity和capability的区别
  17. JSHOP2学习3:基础语法(上)
  18. ewb文件用multisim打开_EWB的使用
  19. JavaScript递归函数的几种写法
  20. c语言表示时间的程序,C语言显示“当前时间”小程序

热门文章

  1. 如何划分测试集和训练集
  2. java 的 MD5 算法介绍 总结 使用
  3. 虚拟机报错模块“Disk”启动失败。 未能启动虚拟机。
  4. 关于设置背景图片的透明度(html+css)
  5. 你有试过AutoCAD的超级填充功能吗?
  6. form表单中的onSubmit
  7. linux systemctl命令详解
  8. 双机(51单片机)串行通信最基本的方法
  9. JavaScript (递归函数)
  10. fastjson:json数组遍历