Linux- 后台运行符、nohup、disown
&
&在Unix-like的操作系统(如Linux和macOS)的shell中,特别是在Bash这样的shell中,经常用作后台运行符号。让我们深入了解一下其功能和用法。
&作为后台运行符号:
-
基本用法:
当我们在一个命令或者一组命令的后面加上&,它们会在后台执行。这意味着这些命令不会阻止我们获得命令行提示符,可以继续执行其他命令。例如:
sleep 10 &这会在后台启动
sleep命令,持续10秒。在此期间,我们会立即获得命令行提示符,可以进行其他任务。 -
作业控制:
当在后台启动任务时,它将被视为一个“作业”。可以使用作业控制命令来管理这些后台任务。jobs: 列出当前shell中的所有后台作业。fg %jobnumber: 将后台作业带到前台运行。bg %jobnumber: 如果一个作业在后台被暂停,此命令可以继续在后台运行它。
例如,如果运行
sleep 30 &并且之后运行jobs,会看到有一个作业在后台运行。 -
输出:
即使命令在后台运行,它的输出(stdout和stderr)默认仍然会发送到当前终端。这可能会中断当前工作。为了避免这种情况,通常会将输出重定向到文件或/dev/null。重定向到文件可以帮助我们保留输出以供以后查看,而重定向到/dev/null实际上是丢弃输出。 -
结束:
当关闭终端时,默认情况下所有后台作业都会被终止。为了防止这种情况,可以使用nohup命令或者disown命令。例如:
nohup long_running_command &或者,如果已经在后台启动了一个作业:
long_running_command & disown %1其中
%1是作业号,通常是启动的第一个作业。可以使用jobs命令查看作业号。
总之,&符号为命令行用户提供了一个方便的方式来在后台执行任务,从而使用户可以并行地进行多个任务。
此处,我们展开说一下输出:
(1) 重定向到文件:
如果想保留输出以供以后查看,可以将 stdout 和 stderr 重定向到文件。
long_running_command > output.log 2>error.log &
在这里,正常的输出(stdout)被重定向到 output.log,而错误输出(stderr)被重定向到 error.log。
(2) 将 stdout 和 stderr 重定向到同一文件:
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命令的详细介绍:
-
基本用途:
当在终端中运行一个命令时,如果退出终端或关闭它,命令通常会被终止。使用
nohup,可以保持这个命令在后台运行,即使终端已关闭。例如,要在后台运行一个长时间运行的脚本并确保即使关闭终端也不会停止,可以这样做:
nohup ./long-running-script.sh & -
输出重定向:
默认情况下,
nohup命令将命令的输出(stdout和stderr)重定向到名为nohup.out的文件中。如果希望将输出重定向到其他位置,可以这样做:nohup ./script.sh > myoutput.log 2>&1 & -
与后台运行结合:
通常,
nohup与&结合使用,这样命令就可以在后台启动并立即返回命令提示符。如果不使用&,命令将在前台开始,但即使关闭终端也会继续运行。 -
如何终止
nohup命令:要终止使用
nohup运行的进程,首先需要找到其进程ID(PID),可以使用ps命令和grep工具来查找。一旦得到PID,可以使用kill命令来终止它。例如:
ps aux | grep long-running-script.sh上述命令会显示与
long-running-script.sh相关的进程。找到PID后,使用:kill -9 <PID>来终止进程。
-
目的与使用场景:
nohup命令特别适用于远程登录到服务器并启动长时间运行的任务的场景。使用nohup可以确保任务继续运行,即使网络连接断开或用户注销。
总之,nohup是一个非常有用的命令,允许在Unix-like操作系统中的任务在没有终端干预的情况下持续运行。这在系统管理、长时间数据处理任务和其他需要持续运行的场景中特别有用。
disown命令
disown 是 bash 和一些其他 shell中的内建命令,用于从 shell 的作业表中移除作业,从而使它们与当前 shell 会话解除关联。这意味着,当关闭或退出 shell 时,这些作业(或进程)不会接收到 HUP(hang up)信号,因此它们不会被终止。
下面详细介绍 disown 命令:
-
基本用法:
当在 shell 中启动一个后台任务,然后决定使其在退出 shell 时保持运行状态,可以使用
disown。例如,假设启动了一个后台进程:
long-running-command &之后,可以简单地运行
disown,该命令将移除最近发送到后台的任务。 -
指定作业号:
如果有多个后台任务,并且只想
disown其中的一个或几个,可以使用作业号(可以使用jobs命令查看)。例如:
[1] + running sleep 300 [2] running long-running-command要移除第二个任务,可以使用:
disown %2 -
移除所有作业:
disown命令也可以与-a选项一起使用,从作业表中移除所有作业。disown -a -
移除当前 shell 启动的所有作业:
使用
-r选项可以移除由当前 shell 启动的所有作业:disown -r -
与
nohup的比较:disown和nohup都可以使进程在退出 shell 时继续运行。但它们的工作方式有所不同:nohup是在启动进程时使用的,以确保进程从一开始就与 shell 解除关联。disown是在进程已经启动后使用的,以后续地从 shell 的作业表中移除进程。
总的来说,disown 是一个在需要长时间运行的后台任务,但又不想这些任务在退出或关闭 shell 时被终止的情况下非常有用的工具。它允许我们管理和保持这些后台任务的持续运行,即使我们的 shell 会话已经结束。
相关文章:
Linux- 后台运行符、nohup、disown
& &在Unix-like的操作系统(如Linux和macOS)的shell中,特别是在Bash这样的shell中,经常用作后台运行符号。让我们深入了解一下其功能和用法。 &作为后台运行符号: 基本用法: 当我们在一个命令或者一组命令…...
开发过程教学——交友小程序
交友小程序 1. 我的基本信息2. 我的人脉2.1 我的关注2.2 我的粉丝 3. 我的视频4. 我的相册 特别注意:由于小程序分包限制2M以内,所以要注意图片和视频的处理。 1. 我的基本信息 数据库表: 我的基本信息我的登录退出记录我的登录状态&#x…...
正则表达式 Regular Expression学习
该文章内容为以下视频的学习笔记: 10分钟快速掌握正则表达式_哔哩哔哩_bilibili正则表达式在线测试工具:https://regex101.com/, 视频播放量 441829、弹幕量 1076、点赞数 19330、投硬币枚数 13662、收藏人数 26242、转发人数 2768, 视频作者 奇乐编程学…...
代谢组学最常用到的数据分析方法(五)
代谢组学是一门对某一生物或细胞所有低分子质量代谢产物(以相对分子质量<1000的有机和无机的代谢物为研究核心区)进行分析的新兴学科。因此从复杂的代谢组学数据中确定与所研究的现象有关的代谢物,筛选出候选生物标记物成为代谢物组学研究…...
105.从前序与中序遍历序列构造二叉树
力扣题目链接(opens new window) 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7] 返回如下的二叉树: class Solution { public:Tr…...
分支定界、分支切割、分支定价的区别
目录 1.从原理的角度 (1)分支定界: (2)分支切割: (3)分支定价: 2.从分支树的角度 (1)分支定界 (2)分支切割 &…...
数字IC前端学习笔记:数字乘法器的优化设计(阵列乘法器)
相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 数字信号处理作为微处理器的核心部件,是决定着总体处理器性能的因素之一,而数字乘法器是最常见的一种数字信号处理电路。通常情况下&#…...
批量删除wordpress文章修订版本/自动草稿残留数据(3种方法)及四种方法禁用WordPress文章历史修订/自动保存/自动草稿功能
目录 1、批量删除wordpress文章修订版本/自动草稿残留数据(3种方法) 方法一:SQL命令批量删除 命令: 方法二:利用PHP代码来删除 方法三:利用数据库清理优化插件 WP Clean Up 或 WP Cleaner 批量删除 2…...
HTTP初识,fiddler的使用,URL各部分介绍,QueryString
目录 一、什么是HTTP 二、抓包工具 三、请求的首行 URL 四、URL的各部分详细介绍 一、什么是HTTP 现在网页上,我们常见的是https,但是在二十年前是以http为主,这个协议也叫超文本传输协议,文本->字符串,“超文本”->图片…...
计算机毕业设计 基于SpringBoot的图书馆管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
第三章:最新版零基础学习 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)是微软基于云身份验证和访问控制的解决方案,通过SSO登录其他o365应用(word/outlook/teams…) 微软在2023年7月把AAD重命名为Microsoft Entra ID,官网:https://www.microsoft.com/zh-cn/security/b…...
基于SSM的视频点播系统设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
React 知识点总结
本篇文章是我自己总结已经写过的react知识点,大框架已生成,知识持续更新中。仅供参考 生命周期 React 生命周期 组件基础 react中受控组件与非受控组件 React Portals 理解React页面渲染原理,如何优化React性能? 学习篇之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程序(手工制作)第一个Maven程序(IDEA生成)使用模版(骨架)创建Ma…...
MySQL进阶 —— 超详细操作演示!!!(下)
MySQL进阶 —— 超详细操作演示!!!(下) 五、锁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源码解析(1)事件对象(2)事件操作(3)事件循环(4)事件处理 常用指令问题记录问题一:长连接的管理问题二:连接关闭问…...
C++ opencv设置视频的捕获方式为 MJPG设置失败
我有一款4k摄像头,在设置分辨率为4k的时候总是出现帧率不够的情况, 使用命令查看 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…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
