• 【genius_platform软件平台开发】第七十九讲:Linux系统中可执行程序后台运行的几种方式


    【genius_platform软件平台开发】第七十九讲:Linux系统中可执行程序后台运行的几种方式

    1. 问题描述

    • 当我们在做服务的时候,有时候在终端界面启动了,但是往往因为网络,关闭屏幕,执行CTRL+C等原因造成ssh断开造成正在运行程序退出,使得我们的服务程序也随即终止了。其背后的主要原因在于上述的相关操作,shell默认会发送中断信号给该终端session关联的进程,从而导致进程跟随终端退出,为了弄清这个问题我们首先要了解两种中断信号

    • 1)第一种中断信号sigintsignal interruptctrl+c会发送此信号,主动关闭程序

    • 2)第二种中断信号sighup: signal hang up关闭终端网络断线关闭屏幕会发送此挂断信号

    2. & 符号

    • 这是一种把 &放在执行命令最后,使启动的程序忽略sigint信号,此时执行ctrl+c关闭不会关闭此进程,但是当屏幕关闭断网仍然会造成进程退出
    sh test.sh &
    
    • 1

    3. nohup指令

    • nohupno hang up),意思就是不挂断运行,用nohup运行命令可以使命令永久执行下去,和用户终端没有关系断开SSH不影响运行nohup捕获了SIGHUP,并做了忽略处理,因此当屏幕关闭,断网等造成ssh中断时进程不会退出。但是ctrl+c可以关闭该进程。因此大多数情况同时使用nohup和&启动的程序,ctrl+c和关闭终端都无法关闭。在缺省情况下所有输出都被重定向到一个名为nohup.out的文件中。

    • nohup指令基本使用格式:

    nohup Command \[ Arg ... \] \[ & \]
    
    • 1

    举例

    • 后台不中断执行./test.sh,stdout输出给out.log,stderr输出给err.log
    nohup ./test.sh > out.log 2>err.log  &
    
    • 1
    • 相关的数字含义如下:
    0 – stdin (standard input)1 – stdout (standard output),显然 nohup command > out.log 等价于 nohup command 1> out.log,是缺省行为。
    
    2 – stderr (standard error)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 可能你也会见到这种写法,其含义是把stderr也重定向给stdin
    nohup ./test.sh > out.log 2>&1  &
    
    • 1

    4. ctrl + z、jobs、fg、bg命令

    • 如果我们程序在启动的时候并没有使用&,nohup怎么办呢,难道我们需要先执行ctrl + c将在前台执行的进程终止执行再重新启动吗,显然有好的方法!

    4.1 ctrl + z

    • 将一个正在前台执行的作业进程放到后台,并且暂停,用术语讲就是挂起,执行后如下:
    [1]+ Stopped ./test.sh
    
    • 1

    4.2 jobs

    • 查看当前有多少在后台运行的命令,[jobnumber] 就是作业号。
    jobs  
    [1]+ Stopped ./test.sh   
    [2]+ Running ./test2.sh &
    
    • 1
    • 2
    • 3

    4.3 bg

    • 后台暂停(挂起)的作业进程继续运行。例如把1号作业(./test.sh) 放到后台运行,注意看已经带了&
    bg 1  
    
    [1]+ ./test.sh  &
    
    • 1
    • 2
    • 3

    4.4 fg

    • 后台中的作业进程调至前台继续运行,例如把2号作业(./test2.sh &)调至前台运行
    fg 2   
    
    ./test2.sh
    
    • 1
    • 2
    • 3
  • 相关阅读:
    workerman,swoole,golang并发性能测试
    TCP/IP协议专栏——ARP攻击原理与分类——网络入门和工程维护必看
    ubuntu下python安装wx包出错解决办法
    ardupilot开发 --- Jetson Orin Nano 篇
    redisinsight--基础--2.2--安装--docker安装
    使用 Python 的高效相机流
    数据结构与算法-第五章 树与二叉树
    【精选】网络安全大厂面试题 2.0
    自学 TypeScript 第二天 编译选项
    多种DNS的详细搭建方案和实现步骤,自建DNS防止DNS污染、DNS劫持,包括基于bind的named、dnsmasq、c-l-a-s-hdns等。
  • 原文地址:https://blog.csdn.net/Windgs_YF/article/details/127784226