先来写一个需要一直运行的程序,比如 Flask 版的 Hello World

$ vi hello.py

from flask import Flask

app = Flask(__name__)

@app.route('/')

def index():

return '

hello world

'

if __name__ == '__main__':

app.run(host='0.0.0.0')

$ pip install flask

$ python hello.py

启动成功控制台提示:

* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

此时打开浏览器访问 http://你的服务器ip:5000 即可看到 Hello World 了

按 CTRL+C 退出,如果想让程序一直运行又想同时做其他事怎么办?

CTRL+Z 暂停程序

程序在前台运行时,按下 CRTL+Z, 程序进入暂停状态

[1] + 74237 suspended python hello.py

此时你又可以在终端下敲其他命令了。但刷新浏览器,长时间没有响应,因为程序进入暂停状态了。

jobs 列出后台运行的命令

$ jobs

[1] - suspended python hello.py

再来启动一个命令,比如

$ tail -f hello.py

然后 CTRL+Z 暂停,再运行下 jobs 命令

$ jobs

[1] - suspended python hello.py

[2] + suspended tail -f hello.py

前面的[1] [2] 是任务编号,+ - 和接下来要说的 fg、bg 命令有关,suspended 那一栏表示状态,剩下的就是命令了

bg 将程序运行在后台

直接打 bg 命令不加参数,运行的将是 jobs 列出的 第二列是 + 的那个程序

$ jobs

[1] - suspended python hello.py

[2] + suspended tail -f hello.py

$ bg

[2] - 74616 continued tail -f hello.py

$ jobs

[1] + suspended python hello.py

[2] - running tail -f hello.py

打了一次 bg 命令之后,原本是 + 的那个命令变成 running 了,同时 + 也移到了其他命令前面

$ bg

[1] - 74237 continued python hello.py

$ jobs

[1] - running python hello.py

[2] + running tail -f hello.py

此时看到 python hello.py 处于运行状态,浏览器访问 http://你的服务器ip:5000 正常看到 hello world,但尽管程序已经在后台运行了,终端还是有日志输出:

127.0.0.1 - - [08/Apr/2017 14:34:52] "GET / HTTP/1.1" 200 -

这对我们的其他工作造成了干扰,下面再讨论怎么解决这个问题。

bg 命令还可以添加参数任务

$ bg %1

% 号后面跟着的是 jobs 命令输出的标号

fg 将后台运行的程序调到前台

fg 和 bg 命令一样,可以直接打 fg 将前面有 + 号的程序调到前台,也可以以 %标号的形式指定哪个程序

$ fg %2

然后 CTRL+C 退出,或者 CTRL+Z 暂停,然后 bg %2 在后台运行

使用 & 将程序放到后台

要把一个程序放在后台运行,照上面的做法,得先运行,然后 CTRL+Z 暂停,再用 bg 命令放到后台运行。使用 & 来简化这一过程,并且使用 > 来重定向后台运行的程序在终端上的输出。要继续下面的操作,先用 fg 命令将

python hello.py

调到前台,然后 CTRL+C 退出运行。

重新运行

$ python hello.py > hello.log 2>&1 &

上面这条命令,> hello.log 表示将 python hello.py 在屏幕上标准的输出重定向到了 hello.log 这个文件,2>&1 表示将错误信息重定向到标准输出,& 号表示在后台运行。刷新浏览器,正常看到 'hello word',终端没有输出。可以使用 tail 命令加上 -f 参数追踪 hello.log 文件的输出

$ tail -f hello.log

多刷新几次浏览器,可以看到和之前那样的日志输出。

要退出运行,同样可以使用 fg 命令,然后 CTRL+C 退出。

nohup 命令的使用

使用 bg 命令和 & 后台运行程序还有个缺点,你退出当前终端,程序也结束了。解决这一办法的是使用 nohup 命令,例如

$ nohup python hello.py &

nohup 命令默认将输出重定向到 nohup.out 这个文件,可以使用 tail 命令跟踪 nohup.out 这个文件观察程序的输出

$ tail -f nohup.out

多刷新几次浏览器,可以看到和之前屏幕上一样的输出。退出当前终端,刷新浏览器,还是能看到 'hello world'。

没退出终端之前,可以使用 fg 命令将程序调到前台,然后 CTRL+C 结束。如果已经退出当前终端,下次再登录进来,可以使用 ps aux 命令找出程序的 pid, 然后用 kill 命令结束。

linux后台停止执行命令,Linux 命令的后台运行相关推荐

  1. linux 后台运行jar包命令,Linux 运行jar包命令(Cent OS 7后台运行jar包)

    Linux 运行jar包命令如下: 方式一 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 java -jar shareniu. ...

  2. linux后台运行cat命令,Linux程序前台后台切换

    Linux程序前台后台切换1.在Linux终端运行命令的时候,在命令末尾加上 & 符号,就可以让程序在后台运行Ubuntu$">root@Ubuntu$ ./tcpserv01 ...

  3. 后台执行UNIX/Linux命令和脚本的五种方法

    http://hankjin.blog.163.com/blog/static/337319372010111492348473/ 2010-12-14 09:35:48|  分类: Unix |   ...

  4. [译]后台执行UNIX/Linux命令和脚本的五种方法

    原文:http://www.thegeekstuff.com/2010/12/5-ways-to-execute-linux-command/ by SathiyaMoorthy on Decembe ...

  5. linux结束后台命令,linux 终端的后台任务结束详解

    在用管理员执行一个命令后,用Ctrl+Z把命令转移到了后台.导致无法退出终端. 输入命令:exit 终端显示:There are stopped jobs. 解决方法: 方法一.输入命令:jobs 终 ...

  6. linux如何把命令放前台,Linux命令的前台或后台执行

    自然情况下,我们在Linux的terminal窗口里输入一个命令,回车执行,命令打印出结果,执行结束,命令提示符再次出现.这样的执行方式叫做前台执行. Linux命令的前台执行很常用,但是有个问题,就 ...

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

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

  8. linux 清空nohup日志命令,Linux命令之 nohup 和 后台执行命令使用说明

    摘要:nohup 是 no hungup 的缩写,意思是"不挂断".我们在使用Xshell等工具,远程执行Linux脚本时,有时候会由于网络问题,导致失去连接,终端断开,程序运行一 ...

  9. linux 任务后台bg和fg命令

    Linux的bg和fg命令 我们都知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务.而不能让程序在前台后台之间切换.而 Linux 提供了 fg 和 bg 命 ...

最新文章

  1. 【browser】chinese chrome shows as english
  2. 什么是HystrixDashbord/如何使用?
  3. Java连接sap无明显报错信息,Kettle连接SAP报错问题
  4. Mysql整库导出导入
  5. MAC环境配置SDK
  6. C#、ASP.NET 将PDF转换成Swf
  7. Mac 下 Chrome 谷歌浏览器 快捷键
  8. 大学综评自招面试 计算机专业,自主招生中的综合评价面试技巧
  9. 蒙特卡洛(Monte Carlo)方法的理解
  10. K线技术指标实现—同花顺多空趋势点
  11. PopupWindow底部弹出,底部UI被遮盖问题
  12. 《寒江独钓windows内核安全编程》学习笔记之一
  13. 42. OP-TEE中secure stroage------安全文件的创建
  14. 使用 Qt for Android 获取并利用手机传感器数据(上篇)开发环境省心搭建
  15. 深耕硬科技,香港科大百万创赛与八大投资机构签署合作意向
  16. bilibili缓存文件在哪里_用这3招,彻底清除Windows10更新缓存,电脑高手必会
  17. matlab双线性变换切比雪夫2,语音信号滤波去噪——使用双线性变换法设计切比雪夫II型.doc...
  18. 【Flutter实现表格上下左右滚动】
  19. 使用注解失败的原因及解决方法
  20. USACO2013 island travels

热门文章

  1. html button跳转页面_HTML常用标签
  2. 《工程师文化行为自我分享》_文化对于鼓励创新行为至关重要
  3. docker 安全性_使用最新的安全性增强来调整Docker
  4. es6 Decorator类的修饰器
  5. 启航篇——四旋翼飞行器之入坑两年心路历程和毕设总结
  6. c语言用字符串统计一个整数中数字的个数_全国计算机等级考试二级C语言
  7. dw2019连接mysql数据库_Dreamweaver 8.0连接Mysql数据库全攻略
  8. c语言如何删除数组中的某一个元素_数据结构之线性表高效删除重复元素
  9. 理解Vue的计算属性
  10. 【操作系统】多道程序的理解