当前位置: 首页 > news >正文

Linux- 后台运行符、nohup、disown

&

&在Unix-like的操作系统(如Linux和macOS)的shell中,特别是在Bash这样的shell中,经常用作后台运行符号。让我们深入了解一下其功能和用法。

&作为后台运行符号:

  1. 基本用法:
    当我们在一个命令或者一组命令的后面加上&,它们会在后台执行。这意味着这些命令不会阻止我们获得命令行提示符,可以继续执行其他命令。

    例如:

    sleep 10 &
    

    这会在后台启动sleep命令,持续10秒。在此期间,我们会立即获得命令行提示符,可以进行其他任务。

  2. 作业控制:
    当在后台启动任务时,它将被视为一个“作业”。可以使用作业控制命令来管理这些后台任务。

    • jobs: 列出当前shell中的所有后台作业。
    • fg %jobnumber: 将后台作业带到前台运行。
    • bg %jobnumber: 如果一个作业在后台被暂停,此命令可以继续在后台运行它。

    例如,如果运行sleep 30 &并且之后运行jobs,会看到有一个作业在后台运行。

  3. 输出:
    即使命令在后台运行,它的输出(stdout和stderr)默认仍然会发送到当前终端。这可能会中断当前工作。为了避免这种情况,通常会将输出重定向到文件或/dev/null。重定向到文件可以帮助我们保留输出以供以后查看,而重定向到 /dev/null 实际上是丢弃输出。

  4. 结束:
    当关闭终端时,默认情况下所有后台作业都会被终止。为了防止这种情况,可以使用nohup命令或者disown命令。

    例如:

    nohup long_running_command &
    

    或者,如果已经在后台启动了一个作业:

    long_running_command &
    disown %1
    

    其中%1是作业号,通常是启动的第一个作业。可以使用jobs命令查看作业号。

总之,&符号为命令行用户提供了一个方便的方式来在后台执行任务,从而使用户可以并行地进行多个任务。


此处,我们展开说一下输出:

(1) 重定向到文件:

如果想保留输出以供以后查看,可以将 stdoutstderr 重定向到文件。

long_running_command > output.log 2>error.log &

在这里,正常的输出(stdout)被重定向到 output.log,而错误输出(stderr)被重定向到 error.log

(2) stdoutstderr 重定向到同一文件:

long_running_command > output.log 2>&1 &

这会将正常的输出和错误都保存在 output.log 中。

(3) 重定向到 /dev/null:

如果不关心输出并希望完全丢弃它,可以使用 /dev/null。这是一个特殊的设备,通常被称为“黑洞”,因为写入它的任何东西都会被永久丢弃。

long_running_command > /dev/null 2>&1 &

这里,正常的输出和错误都被发送到 /dev/null,从而被完全丢弃。

使用这些重定向技术,可以确保后台任务的输出不会干扰我们的终端会话,同时还可以选择保留或丢弃输出。


nohup命令

nohup是Unix和Linux系统中的一个命令,用于在退出帐户或关闭终端后继续运行命令。其名称“nohup”来源于“no hang up”,表示即使挂起也不中断执行。

以下是对nohup命令的详细介绍:

  1. 基本用途:

    当在终端中运行一个命令时,如果退出终端或关闭它,命令通常会被终止。使用nohup,可以保持这个命令在后台运行,即使终端已关闭。

    例如,要在后台运行一个长时间运行的脚本并确保即使关闭终端也不会停止,可以这样做:

    nohup ./long-running-script.sh &
    
  2. 输出重定向:

    默认情况下,nohup命令将命令的输出(stdout和stderr)重定向到名为nohup.out的文件中。如果希望将输出重定向到其他位置,可以这样做:

    nohup ./script.sh > myoutput.log 2>&1 &
    
  3. 与后台运行结合:

    通常,nohup&结合使用,这样命令就可以在后台启动并立即返回命令提示符。如果不使用&,命令将在前台开始,但即使关闭终端也会继续运行。

  4. 如何终止nohup命令:

    要终止使用nohup运行的进程,首先需要找到其进程ID(PID),可以使用ps命令和grep工具来查找。一旦得到PID,可以使用kill命令来终止它。

    例如:

    ps aux | grep long-running-script.sh
    

    上述命令会显示与long-running-script.sh相关的进程。找到PID后,使用:

    kill -9 <PID>
    

    来终止进程。

  5. 目的与使用场景:

    nohup命令特别适用于远程登录到服务器并启动长时间运行的任务的场景。使用nohup可以确保任务继续运行,即使网络连接断开或用户注销。

总之,nohup是一个非常有用的命令,允许在Unix-like操作系统中的任务在没有终端干预的情况下持续运行。这在系统管理、长时间数据处理任务和其他需要持续运行的场景中特别有用。

disown命令

disown 是 bash 和一些其他 shell中的内建命令,用于从 shell 的作业表中移除作业,从而使它们与当前 shell 会话解除关联。这意味着,当关闭或退出 shell 时,这些作业(或进程)不会接收到 HUP(hang up)信号,因此它们不会被终止。

下面详细介绍 disown 命令:

  1. 基本用法:

    当在 shell 中启动一个后台任务,然后决定使其在退出 shell 时保持运行状态,可以使用 disown

    例如,假设启动了一个后台进程:

    long-running-command &
    

    之后,可以简单地运行 disown,该命令将移除最近发送到后台的任务。

  2. 指定作业号:

    如果有多个后台任务,并且只想 disown 其中的一个或几个,可以使用作业号(可以使用 jobs 命令查看)。

    例如:

    [1]  + running    sleep 300
    [2]    running    long-running-command
    

    要移除第二个任务,可以使用:

    disown %2
    
  3. 移除所有作业:

    disown 命令也可以与 -a 选项一起使用,从作业表中移除所有作业。

    disown -a
    
  4. 移除当前 shell 启动的所有作业:

    使用 -r 选项可以移除由当前 shell 启动的所有作业:

    disown -r
    
  5. nohup 的比较:

    disownnohup 都可以使进程在退出 shell 时继续运行。但它们的工作方式有所不同:

    • nohup 是在启动进程时使用的,以确保进程从一开始就与 shell 解除关联。
    • disown 是在进程已经启动后使用的,以后续地从 shell 的作业表中移除进程。

总的来说,disown 是一个在需要长时间运行的后台任务,但又不想这些任务在退出或关闭 shell 时被终止的情况下非常有用的工具。它允许我们管理和保持这些后台任务的持续运行,即使我们的 shell 会话已经结束。

相关文章:

Linux- 后台运行符、nohup、disown

& &在Unix-like的操作系统&#xff08;如Linux和macOS&#xff09;的shell中&#xff0c;特别是在Bash这样的shell中&#xff0c;经常用作后台运行符号。让我们深入了解一下其功能和用法。 &作为后台运行符号&#xff1a; 基本用法: 当我们在一个命令或者一组命令…...

开发过程教学——交友小程序

交友小程序 1. 我的基本信息2. 我的人脉2.1 我的关注2.2 我的粉丝 3. 我的视频4. 我的相册 特别注意&#xff1a;由于小程序分包限制2M以内&#xff0c;所以要注意图片和视频的处理。 1. 我的基本信息 数据库表&#xff1a; 我的基本信息我的登录退出记录我的登录状态&#x…...

正则表达式 Regular Expression学习

该文章内容为以下视频的学习笔记&#xff1a; 10分钟快速掌握正则表达式_哔哩哔哩_bilibili正则表达式在线测试工具&#xff1a;https://regex101.com/, 视频播放量 441829、弹幕量 1076、点赞数 19330、投硬币枚数 13662、收藏人数 26242、转发人数 2768, 视频作者 奇乐编程学…...

代谢组学最常用到的数据分析方法(五)

代谢组学是一门对某一生物或细胞所有低分子质量代谢产物&#xff08;以相对分子质量<1000的有机和无机的代谢物为研究核心区&#xff09;进行分析的新兴学科。因此从复杂的代谢组学数据中确定与所研究的现象有关的代谢物&#xff0c;筛选出候选生物标记物成为代谢物组学研究…...

105.从前序与中序遍历序列构造二叉树

力扣题目链接(opens new window) 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如&#xff0c;给出 前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7] 返回如下的二叉树&#xff1a; class Solution { public:Tr…...

分支定界、分支切割、分支定价的区别

目录 1.从原理的角度 &#xff08;1&#xff09;分支定界&#xff1a; &#xff08;2&#xff09;分支切割&#xff1a; &#xff08;3&#xff09;分支定价&#xff1a; 2.从分支树的角度 &#xff08;1&#xff09;分支定界 &#xff08;2&#xff09;分支切割 &…...

数字IC前端学习笔记:数字乘法器的优化设计(阵列乘法器)

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 数字信号处理作为微处理器的核心部件&#xff0c;是决定着总体处理器性能的因素之一&#xff0c;而数字乘法器是最常见的一种数字信号处理电路。通常情况下&#…...

批量删除wordpress文章修订版本/自动草稿残留数据(3种方法)及四种方法禁用WordPress文章历史修订/自动保存/自动草稿功能

目录 1、批量删除wordpress文章修订版本/自动草稿残留数据&#xff08;3种方法&#xff09; 方法一&#xff1a;SQL命令批量删除 命令&#xff1a; 方法二&#xff1a;利用PHP代码来删除 方法三&#xff1a;利用数据库清理优化插件 WP Clean Up 或 WP Cleaner 批量删除 2…...

HTTP初识,fiddler的使用,URL各部分介绍,QueryString

目录 一、什么是HTTP 二、抓包工具 三、请求的首行 URL 四、URL的各部分详细介绍 一、什么是HTTP 现在网页上&#xff0c;我们常见的是https,但是在二十年前是以http为主&#xff0c;这个协议也叫超文本传输协议&#xff0c;文本->字符串&#xff0c;“超文本”->图片…...

计算机毕业设计 基于SpringBoot的图书馆管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

第三章:最新版零基础学习 PYTHON 教程(第十二节 - Python 运算符—Python 中的运算符函数 - 套装1)

Python 在“operator”模块下预定义了许多数学、逻辑、关系、位等运算的函数。本文介绍了一些基本功能。 1. add(a, b):- 该函数返回给定参数的加法。 操作-a +b。 2. sub(a, b):- 该函数返回给定参数的差值。 操作-a -b。 3. mul(a, b):- 该函数返回给定参数的乘积。 操…...

AAD基础知识(identity/token/PRT)

简介 AAD(Azure Active Directory/Azure AD)是微软基于云身份验证和访问控制的解决方案&#xff0c;通过SSO登录其他o365应用(word/outlook/teams…) 微软在2023年7月把AAD重命名为Microsoft Entra ID&#xff0c;官网&#xff1a;https://www.microsoft.com/zh-cn/security/b…...

基于SSM的视频点播系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

React 知识点总结

本篇文章是我自己总结已经写过的react知识点&#xff0c;大框架已生成&#xff0c;知识持续更新中。仅供参考 生命周期 React 生命周期 组件基础 react中受控组件与非受控组件 React Portals 理解React页面渲染原理&#xff0c;如何优化React性能&#xff1f; 学习篇之R…...

ALSA project the C library refrerenc (ALSA工程 C库参考说明)

作者: Jaroslav Kysela perexperex.cz Abramo Bagnara abramoalsa-project.org Takashi Iwai tiwaisuse.de Frank van de Pol fvdpolcoil.demon.nl前言: 高级linux音频架构(ALSA)来自内核API和库的API.这个篇文章描述了应用层库API和内核层API对应是怎么的interfaces.API用法: …...

【Maven基础篇-黑马程序员】Maven项目管理从基础到高级,一次搞定!

文章目录 前言Maven简介Maven是什么Maven的作用 Maven的下载与安装Maven基础概念仓库坐标仓库配置全局setting与用户setting区别 第一个Maven程序&#xff08;手工制作&#xff09;第一个Maven程序&#xff08;IDEA生成&#xff09;使用模版&#xff08;骨架&#xff09;创建Ma…...

MySQL进阶 —— 超详细操作演示!!!(下)

MySQL进阶 —— 超详细操作演示&#xff01;&#xff01;&#xff01;&#xff08;下&#xff09; 五、锁5.1 概述5.2 全局锁5.3 表级锁5.4 行级锁 六、InnoDB 引擎6.1 逻辑存储结构6.2 架构6.3 事务原理6.4 MVCC 七、MySQL 管理7.1 系统数据库7.2 常用工具 MySQL— 基础语法大…...

SVM(上):如何用一根棍子将蓝红两色球分开?

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。 🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、…...

libevent源码学习笔记

libevent源码学习笔记 libevent安装libevent源码解析&#xff08;1&#xff09;事件对象&#xff08;2&#xff09;事件操作&#xff08;3&#xff09;事件循环&#xff08;4&#xff09;事件处理 常用指令问题记录问题一&#xff1a;长连接的管理问题二&#xff1a;连接关闭问…...

C++ opencv设置视频的捕获方式为 MJPG设置失败

我有一款4k摄像头&#xff0c;在设置分辨率为4k的时候总是出现帧率不够的情况&#xff0c; 使用命令查看 v4l2-ctl --device/dev/video0 --list-formats-ext发现 v4l2-ctl --device/dev/video0 --list-formats-ext ioctl: VIDIOC_ENUM_FMTType: Video Capture[0]: MJPG (Moti…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...