nohup 命令解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: `nohup`不会断开与终端的命令,它会使您的脚本被忽略`SIGHUP`,并重定向`stdout/stderr`到一个文件`nohup.out`,以便在您注销后该命令可以在后台继续运行。

nohup

SIGHUP 信号

SIGHUP会在以下3种情况下被发送给相应的进程:

  1. 终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用 & 符号提交的进程);
  2. session首进程退出时,该信号被发送到该session中的前台进程组中的每一个进程;
  3. 若父进程退出导致进程组成为孤儿进程组,且该进程组中有进程处于停止状态(收到SIGSTOPSIGTSTP信号),该信号会被发送到该进程组中的每一个进程。

例如:在我们登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个 Session。当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。这个信号的默认操作为终止进程,因此前台进 程组和后台有终端输出的进程就会中止。

nohup 命令

nohup不会断开与终端的命令,它会使您的脚本被忽略SIGHUP,并重定向stdout/stderr到一个文件nohup.out,以便在您注销后该命令可以在后台继续运行。

nohup不会自动将命令在后台运行。必须通过用 & 来明确地做到后台运行。

jobs可以打印当前正在运行的作业及其状态。如果命令jobs找不到它,那么它不再是该shell的子进程。

fg即使运行后,也可以使用bash将后台作业带回前台nohup。但这不会改变输出重定向,它仍将转移到文件中nohup.out

测试

防止退出登录后,脚本结束运行,使用nohup

#!/bin/bash
for i in `seq 1000`;
do

    echo "$i";
    sleep 2;
done;
nohup sh t.sh 2>&1 &

nohup&

通常,在运行命令后使用&和退出shell时,shell将使用hangup signal(kill -SIGHUP <pid>)终止子命令。这可以使用nohup,因为它捕获信号并忽略它,以便它永远不会到达实际的应用程序。

如果您正在使用bash,则可以使用该命令shopt | grep hupon查明您的shell是否将SIGHUP发送到其子进程。如果它关闭,进程将不会终止。

huponexitoff时,exit时不会向终端所属任务发SIGHUP信号,激活该选项:
shopt -s huponexit

将已经运行的进程放到nohup下

  1. Ctrl+ Z停止(暂停)程序并返回shell。
  2. bg 在后台运行它。
  3. disown -h [job-spec]其中[job-spec]是作业编号(类似于%1第一个正在运行的作业;使用jobs命令查找您的编号),以便在终端关闭时不会终止作业。

假设由于某种原因Ctrl+ Z也无法正常工作,请转到另一个终端,找到进程ID(使用ps)并运行

kill -SIGSTOP PID
kill -SIGCONT PID

SIGSTOP将暂停该进程并用SIGCONT在后台恢复该进程。所以现在,关闭两个终端并不会停止你的过程。

更多资料

Linux nohup命令

Linux Signal及Golang中的信号处理

相关文章
|
2天前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
2月前
|
网络协议 开发工具 C语言
Jetson错误(二):wget命令提示无法解析主机地址的问题解决
对于解决在NVIDIA Jetson平台上使用wget命令时出现的无法解析主机地址的问题,提供了两种解决方法:一种是临时修改DNS服务器为Google的公共DNS,另一种是永久修改DNS设置。
158 5
|
3月前
|
存储 缓存 NoSQL
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
83 0
|
4月前
|
图形学 开发者 存储
超越基础教程:深度拆解Unity地形编辑器的每一个隐藏角落,让你的游戏世界既浩瀚无垠又细节满满——从新手到高手的全面技巧升级秘籍
【8月更文挑战第31天】Unity地形编辑器是游戏开发中的重要工具,可快速创建复杂多变的游戏环境。本文通过比较不同地形编辑技术,详细介绍如何利用其功能构建广阔且精细的游戏世界,并提供具体示例代码,展示从基础地形绘制到植被与纹理添加的全过程。通过学习这些技巧,开发者能显著提升游戏画面质量和玩家体验。
197 3
|
4月前
|
数据采集 运维 监控
运维笔记:流编辑器sed命令用法解析
运维笔记:流编辑器sed命令用法解析
69 5
|
4月前
|
Linux 数据安全/隐私保护 Perl
解锁Linux高手秘籍:文件操作+命令解析大揭秘,面试场上让你光芒万丈,技术实力惊艳四座!
【8月更文挑战第5天】Linux作为服务器与嵌入式系统的基石,其文件管理和命令行操作是技术人员必备技能。本文从文件操作和基础命令两大方面,深入浅出地解析Linux核心要义,助你在面试中脱颖而出。首先探索文件系统的树状结构及操作,包括使用`ls -la`浏览文件详情、`touch`创建文件、`rm -r`慎删目录、`cp`与`mv`复制移动文件、以及利用`find`搜索文件。接着掌握命令行技巧,如用`cat`、`more`和`less`查看文件内容;借助`grep`、`sed`与`awk`处理文本;运用`ps`、`top`和`kill`管理进程;并通过`chmod`和`chown`管理文件权限。
84 8
|
4月前
|
运维 Ubuntu Shell
Docker命令宝典:解锁容器化技术的无限可能,从镜像管理到容器操作,全面解析与实战指南!
【8月更文挑战第3天】Docker简化了应用的部署与运行,掌握其基本命令对开发者和运维人员至关重要。通过`docker images`可查看本地镜像;使用`docker pull`拉取如最新版Ubuntu镜像;`docker rmi`用于删除不再需要的镜像。运行容器可通过`docker run`命令,结合`-it`等选项提供交互式环境。`docker ps`显示运行中的容器,加上`-a`则列出所有容器。`docker stop`和`docker start`分别用于停止和重启容器,而`docker rm`则删除容器。
101 5
|
5月前
|
Linux Docker 容器
ip addr命令解析
ip addr命令解析
700 1
|
4月前
|
运维 Rust 监控
Linux高效运维必备:fd命令深度解析,文件描述符管理从此得心应手!
【8月更文挑战第23天】本文介绍了一款名为fd的命令行工具,该工具基于Rust语言开发,旨在以更直观的语法和更快的速度替代传统的`find`命令。通过本文,您可以了解到如何安装fd以及一些基本用法示例,比如使用正则表达式匹配文件名、排除特定目录等。此外,文章还展示了如何结合`ps`和`lsof`命令来查找特定文件并显示其文件描述符,从而帮助您更好地管理和监控Linux系统中的文件与进程。
163 0
|
5月前
|
Linux
《解析 Linux 命令:systemd-delta》
`systemd-delta`: 解析Linux服务配置差异。概览: 显示服务单元文件与默认配置的对比,助于配置问题排查与系统审计。特点: 清晰展示修改点,涵盖启动选项等。示例: `systemd-delta [--plain] &lt;service&gt;`. 注意: 理解默认配置,谨慎修改,定期检查。掌握此命令,深化系统服务配置洞察,优化Linux管理。#Linux #systemd-delta

热门文章

最新文章

推荐镜像

更多