• 如何暂停和继续运行Linux程序


    一、前言

    我们通过shell窗口运行程序时,由于有的程序长时间运行,直到下班了都还没有返回运行结果。这个时候,我们又不能直接关闭shell窗口,不然前面的时间就白白运行了。

    那有什么办法可以先暂停程序,明天再继续运行呢?(不可行,关闭shell窗口后,后台暂停的程序就终止了)

    有!

    二、分析方案

    方案一:后台运行(有效方案,强烈推荐)。使用 nohup 或者 at

    方案二:背景环境运行(无效方案)。使用ctrl+z、bg等

    三、方案对比:

    方式一:后台运行。使用 nohup 或者 at

    特点是可以关闭shell窗口,但是没有暂停功能,适用于明天查看类型。用pstree或者ps -ef | grep xxx查看,kill 来杀死。

    方式二:背景环境运行。使用ctrl+z、bg等

    特点是不可以关闭shell窗口,具有暂停功能,适用于短暂的放入背景工作。用jobs -l 查看,关闭shell窗口或者kill来杀死。

    ctrl+Z 将现在前景的、运行的程序,变成背景的、暂停的工作。
    jobs 查看背景中的工作编号。 jobs -l可以查看工作进程编号。
    fg %1 调回前景环境运行。将方括号编号为[1]的背景的、暂停的程序,变成前景的、运行的程序。
    bg %2 将背景环境中暂停的工作运行起来。将方括号编号为[2]的背景的、暂停的程序,变成背景的、运行的程序。
    ping 127.0.0.1 > ping.log & 将现在xxx命令程序,变成背景的、运行的程序。在背景当中执行的指令,如果有 stdout 及 stderr 时,他的数据依旧是输出到屏幕上面的, 所以,最佳的状况就是利用数据流重导向, 将输出数据传送至某个文件中。
    注意:
    1、后台运行和背景运行不一样。在背景中的、运行的程序不能被ctrl+C 终止掉,但是可以关闭shell终端或者kill来终止掉。后台运行的程序,关闭shell也不能终止掉,需用kill来终止掉。
    2、背景环境中的程序依赖当前shell窗口存活。背景环境中的进程叫工作。一个shell中的背景环境中的工作,可以用jobs查看,当前shell窗口关闭了背景中的工作也就关闭了。所以在其他shell窗口中,jobs查不到背景环境中的工作。
    3、查看背景环境中的工作用jobs,查看后台环境中的进程用pstree。
    4、开启背景环境中的工作用①先书写命令,再输出重定向和& 或者②先执行命令,再ctrl+Z和bg %1

    附图说明:

    延伸:linux后台运行。在命令最后加&符,就可以实现后台运行。

    xxx >/dev/null 2>&1  &

    如:

    python findfile_email.py >/dev/null 2>&1  &

    这样程序就会在后台运行,且没有日志输出。

  • 相关阅读:
    UML与ER图
    动态规划法求背包问题
    回溯法求解n皇后和迷宫问题
    优先队列和二叉堆
    快排,归并和Shell排序
    关系型数据库设计范式
    Python使用Redis数据库
    Python urllib简单使用
    当SQL UPDATE遇到EXISTS(SELECT ...)时
    关于使用mybatis的一个惨痛教训
  • 原文地址:https://www.cnblogs.com/andy9468/p/10523396.html
Copyright © 2020-2023  润新知