在Linux和Docker中使用nohup进行后台任务管理

在Linux和Docker中使用nohup进行后台任务管理

  • 一、nohup应用场景
  • 二、nohup命令
  • 三、后台任务管理
    • 3.1 列出后台任务jobs
    • 3.2 后台任务转前台fg
    • 3.3 删除后台任务kill

一、nohup应用场景

Linux操作系统(DeepinUbuntu)中,经常需要将程序长时间运行,不希望终端关闭时程序关闭,这时候可以使用nohup命令来实现在命令行终端运行后台程序的目的。

另外,在docker环境下运行脚本时,常常将运行程序放在后台,保持前台交互,更是需要频繁使用nohup命令。

二、nohup命令

nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。

nohup 命令,在默认情况下(非重定向时),会在当前目录输出一个名叫 nohup.out 的日志文件,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

语法格式

 nohup Command [ Arg … ] [ & ]

参数说明:

Command:要执行的命令。

Arg:一些参数,可以指定输出文件。

&:让命令在后台执行,终端退出后命令仍旧执行。

示例

  • 编辑一个延时60秒的sh文件delay.sh,sh文件内容如下

    #!/bin/bash# 这是一个等待1分钟的脚本
    echo "开始等待..."# 使用sleep命令等待60秒
    sleep 60# 等待结束后执行的代码
    echo "等待结束!"
    
  • 使用nohup进行后台运行

    # 运行3个delay.sh,其中2、3输出日志到指定文件logdelay.txt
    deepindemo@deepindemo:~/Downloads$ nohup ./delay.sh &
    [1] 838103
    deepindemo@deepindemo:~/Downloads$ nohup ./delay.sh > logdelay.txt 2>&1 &
    [2] 838108
    deepindemo@deepindemo:~/Downloads$ nohup ./delay.sh > logdelay.txt 2>&1 &
    [3] 838111
    # 使用&执行一次delay.sh的后台运行,在开始等待...后输入回车进入交互界面
    deepindemo@deepindemo:~/Downloads$ ./delay.sh &
    [4] 838113
    deepindemo@deepindemo:~/Downloads$ 开始等待...deepindemo@deepindemo:~/Downloads$
    

三、后台任务管理

3.1 列出后台任务jobs

jobs命令用于显示当前shell环境中的任务列表及任务状态,包括后台运行的任务。这些任务可以是正在运行的,也可以是被挂起的。

当执行一个命令并在其后加上&符号时,该命令将在后台运行。

例如,sleep 10 &将在后台启动一个休眠10秒的进程。在这个进程中,可以执行其他命令,而该后台进程将在指定的时间后完成。

jobs命令可以显示这些后台任务的状态。任务的状态可以是running(正在运行)、stopped(被挂起)或Terminated(已终止)。对于每个任务,jobs还会显示一个任务号,可以使用这个任务号来引用特定的任务。

jobs命令其语法结构如下:

jobs [-l] [-n] [-p] [-r] [-s] [%job_spec ...]

这里的选项和参数的含义如下:

  • 选项

    • -l:列出任务的进程ID(PID)。
    • -n:仅显示任务状态变化的信息。
    • -p:仅显示每个任务的进程ID。
    • -r:仅显示运行状态(running)的任务。
    • -s:仅显示停止状态(stopped)的任务。
  • 参数

    • %job_spec:用于指定要显示的任务的标识号。你可以使用任务号或者命令名的一部分来匹配并显示特定的任务。如果省略此参数,jobs将显示所有后台任务。

示例

  1. jobs:显示当前所有后台任务。

    deepindemo@deepindemo:~/Downloads$ jobs
    [1]   Running                 nohup ./delay.sh > logdelay.txt 2>&1 &
    [2]   Running                 nohup ./delay.sh > logdelay.txt 2>&1 &
    [3]-  Running                 nohup ./delay.sh > logdelay.txt 2>&1 &
    
  2. jobs -l:显示当前系统中所有后台任务及其进程ID。

    deepindemo@deepindemo:~/Downloads$ jobs -l
    [1]  838117 Running                 nohup ./delay.sh > logdelay.txt 2>&1 &
    [2]  838119 Running                 nohup ./delay.sh > logdelay.txt 2>&1 &
    [3]- 838121 Running                 nohup ./delay.sh > logdelay.txt 2>&1 &
    
  3. jobs -r:仅显示正在运行的后台任务。

    deepindemo@deepindemo:~/Downloads$ jobs -r
    [1]   Running                 nohup ./delay.sh > logdelay.txt 2>&1 &
    [2]   Running                 nohup ./delay.sh > logdelay.txt 2>&1 &
    [3]-  Running                 nohup ./delay.sh > logdelay.txt 2>&1 &
    
  4. jobs -s:仅显示已停止的后台任务。

    deepindemo@deepindemo:~/Downloads$ jobs -s
    deepindemo@deepindemo:~/Downloads$
    
  5. jobs -p:仅显示每个后台任务的进程ID。

    deepindemo@deepindemo:~/Downloads$ jobs -p
    838117
    838119
    838121
    
  6. jobs %1:显示任务号为1的后台任务。

    deepindemo@deepindemo:~/Downloads$ jobs %1
    [1]   Running                 nohup ./delay.sh > logdelay.txt 2>&1 &
    

3.2 后台任务转前台fg

可以使用 fg 命令将后台任务转到前台任务。fg 命令用于将作业从后台移至前台,并恢复其执行。

将后台任务转到前台,按照以下步骤进行操作:

  1. 首先使用 jobs 命令查看当前在后台运行的任务列表。这将显示任务的状态和作业号。

    jobs
    
  2. 记住想要转到前台的任务的作业号。作业号通常位于任务列表的前面,并且带有 + 符号表示最近放置到后台的任务。

  3. 使用 fg 命令,并在其后跟上作业号,将后台任务转到前台。

    fg %作业号
    

    或者,如果作业号是最近放置到后台的任务,你可以只使用 fg 命令,不带作业号。

    fg
    
  4. 注意
    如果将停止状态(stopped)的后台任务转前台,需要先使用 bg 命令将其在后台继续执行,然后再使用 fg 命令将其转到前台。

    bg %作业号  # 将任务放到后台继续执行
    fg %作业号  # 将任务转到前台
    

3.3 删除后台任务kill

kill命令用于向进程发送信号,默认情况下是终止进程的执行,包括后台和前台进程。

删除后台任务,可以按照以下步骤进行操作:

  1. 首先使用 jobs 命令查看当前在后台运行的任务列表。显示任务的状态和作业号。

    deepindemo@deepindemo:~/Downloads$ jobs -l
    [1]  838132 Running                 nohup ./delay.sh > logdelay.txt 2>&1 &
    [2]  838134 Running                 nohup ./delay.sh > logdelay.txt 2>&1 &
    [3]- 838136 Running                 nohup ./delay.sh > logdelay.txt 2>&1 &
    [4]+ 838138 Running                 nohup ./delay.sh > logdelay.txt 2>&1 &
    
  2. 记住想要删除的后台任务的PID。

  3. 使用 kill 命令,并在其后跟上任务PID,可以一次删除一个或多个。

    deepindemo@deepindemo:~/Downloads$ kill 838132
    deepindemo@deepindemo:~/Downloads$ kill 838134 838136 838138
    [1]   Terminated              nohup ./delay.sh > logdelay.txt 2>&1
    
  4. 使用 jobs 命令查询后台任务状态

    deepindemo@deepindemo:~/Downloads$ jobs
    [2]   Terminated              nohup ./delay.sh > logdelay.txt 2>&1
    [3]-  Terminated              nohup ./delay.sh > logdelay.txt 2>&1
    [4]+  Terminated              nohup ./delay.sh > logdelay.txt 2>&1
    
  5. 再次使用 jobs 命令查询后台任务状态,已经显示Terminated信息的后台任务不会再出现

    deepindemo@deepindemo:~/Downloads$ jobs
    deepindemo@deepindemo:~/Downloads$
    

may the odds be ever in your favor ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/735434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

题目 2120: T1312-昆虫繁殖

题目描述: 科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过X个月产卵)&#xf…

GPT实战系列-一种构建LangChain自定义Tool工具的简单方法

GPT实战系列-一种构建LangChain自定义Tool工具的简单方法 LLM大模型: GPT实战系列-探究GPT等大模型的文本生成 GPT实战系列-Baichuan2等大模型的计算精度与量化 GPT实战系列-GPT训练的Pretraining,SFT,Reward Modeling,RLHF …

PPT只要出现弹窗就闪退,Word和Excel都是正常的

1. 问题描述 PPT在常规使用下,能进行正常编辑和保存,但在使用过程中出现弹窗,类似于报错或者打开文件选项就会出现闪退,或者在添加新建页时选用右键添加时也会出现闪退。 找了很久的办法,才得到解决。记录一下。 2.…

vim寄存器和宏

目录 1.寄存器1.1.寄存器相关命令 2.宏2.1.宏的录制和回放2.1.1.避免宏回放回到开头重做2.1.2.先搜索 2.2.宏的编辑2.2.1.特殊字符 3.递归的宏4.跨文件运行宏 1.寄存器 寄存器说明注释a-z手动复制数据"寄存器"无名寄存器""p等效为p0-9最后10次删除操作的历…

windows安装ElasticSearch踩坑记

ElasticSearch是一个开源的分布式搜索和分析引擎。它提供实时分布式搜索功能,可以索引和搜索大量的结构化和非结构化数据。Elasticsearch以其速度、可伸缩性和处理复杂查询的能力而闻名。它常用于日志分析、全文搜索、文档搜索和数据分析等领域。使用ElasticSearch的…

稀碎从零算法笔记Day14-LeetCode:同构字符串

题型:字符串、哈希表 链接:205. 同构字符串 - 力扣(LeetCode) 来源:LeetCode 题目描述 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那…

AI相关的实用工具分享

AI实用工具大赏:赋能科研与生活,探索AI的无限可能 前言 在数字化浪潮汹涌而至的今天,人工智能(AI)已经渗透到我们生活的方方面面,无论是工作还是生活,都在悄然发生改变。AI的崛起不仅为我们带…

AHU 算法分析 实验四 动态规划

实验四:动态规划 实验目的 • 理解动态规划的基本思想,理解动态规划算法的两个基本要素最 优子结构性质和子问题的重叠性质。 • 熟练掌握典型的动态规划问题。 • 掌握动态规划思想分析问题的一般方法,对较简单的问题能正确 分析&#x…

网络故障基本判断方法

1)电脑上使用winR键,打开运行窗口,输入CMD命令,点击回车键 2)在弹出的CMD运行窗口中输入ipconfig命令 通过该命令可以查看本机的IP地址,子网掩码和网关等信息。确认电脑中所有网卡配置是否正确。 3&…

llc稳压基本思路2

这套控制思路实际上就是开关电源中常见的反馈系统 大致思路就是,如果由于其他参数波动引起了输出电压偏差,我们可以直接监测这个输出电压,然后根据输出电压与目标电压值的偏差信号传输给芯片,然后芯片来改变频率,从而改…

人工智能研究的各个学派

于对智能产生根源的理解不同形成了三大学派。 一、符号主义 符号主义(Symbolism)是人工智能研究中的一个重要学派,也被称为逻辑主义(Logicism)、心理学派(Psychlogism)或计算机学派&#xff08…

Flink StreamTask启动和执行源码分析

文章目录 前言StreamTask 部署启动Task 线程启动StreamTask 初始化StreamTask 执行 前言 Flink的StreamTask的启动和执行是一个复杂的过程,涉及多个关键步骤。以下是StreamTask启动和执行的主要流程: 初始化:StreamTask的初始化阶段涉及多个…

蓝桥杯2023年-接龙数列(dp)

题目描述 对于一个长度为 K 的整数数列:A1, A2, . . . , AK,我们称之为接龙数列当且仅当 Ai 的首位数字恰好等于 Ai−1 的末位数字 (2 ≤ i ≤ K)。 例如 12, 23, 35, 56, 61, 11 是接龙数列;12, 23, 34, 56 不是接龙数列,因为 …

前端学习之行内和块级标签

行内标签 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>span</title> </head> <body><!-- 行内标签特点&#xff1a;1、不换行,一行可以放多个2、默认宽度内容撑开代表&#…

[2023年]-hadoop面试真题(一)

&#xff08;北京&#xff09;HDFS底层存储原理? (北京) HDFS读写数据流程? (北京) HDFS如何管理元数据或者checkpoint的理解 ? (北京) HDFS常用命令 ? (北京) hadoop调优 (北京) HDFS扩容原理 (北京) HDFS有哪些进程,分别是什么? (北京) HDFS中大量小文件对…

Go实现日志2——支持结构化和hook

代码保存在&#xff1a;https://github.com/liwook/Go-projects/tree/main/log/sulogV2​​​​​​​ 1.日志结构化 日志记录的事件以结构化格式(键值对&#xff0c;或通常是 JSON)表示&#xff0c;随后可以通过编程方式对其进行解析&#xff0c;便于对日志进行监控、警报、…

Googlenet网络架构

原文链接&#xff1a;[1409.4842v1] Going Deeper with Convolutions (arxiv.org) 图源&#xff1a;深入解读GoogLeNet网络结构&#xff08;附代码实现&#xff09;-CSDN博客 表截自原文 以下&#x1f4d2;来自博客深入解读GoogLeNet网络结构&#xff08;附代码实现&#xff0…

【顶刊|修正】多区域综合能源系统热网建模及系统运行优化【复现+延伸】

目录 主要内容 部分代码 结果一览 下载链接 主要内容 该程序复现《多区域综合能源系统热网建模及系统运行优化》模型并进一步延伸&#xff0c;基于传热学的基本原理建立了区域热网能量传输通用模型&#xff0c;对热网热损方程线性化实现热网能量流建模&#xff0…

使用docker-compose编排ruoyi项目

目录 一、开始部署 1.拉取ruoyi代码 2.拉取node镜像 3.拉取maven镜像 4.在/root/ruoyi/java下写一个Dockerfile用于后端Java环境 5.拉取MySQL&#xff0c;Redis&#xff0c;Nginx镜像 6.在/root/java目录下写一个nginx.conf 7.在/root/ruoyi目录下写docker-compose.yml文…

Idea导入Maven项目

方法一&#xff1a;使用Maven面板 方法二&#xff1a;在项目结构中设置&#xff0c;在最后一步中选择pom.xml。