nohup 命令解析

简介: `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

Linux Signal及Golang中的信号处理

相关文章
|
28天前
|
缓存 网络协议 Linux
【Shell 命令集合 网络通讯 】Linux 配置DNS dnsconf 命令 使用教程
【Shell 命令集合 网络通讯 】Linux 配置DNS dnsconf 命令 使用教程
38 0
|
29天前
|
Shell Linux 开发工具
【Shell 命令集合 文件管理】Linux 高级的文件管理器 mc 命令解析
【Shell 命令集合 文件管理】Linux 高级的文件管理器 mc 命令解析
38 0
|
4天前
|
Linux 内存技术
U-Boot 命令解析(一)
U-Boot 命令解析(一)
|
29天前
|
存储 Shell Linux
【Shell 命令集合 文件管理】Linux 更新locate命令所使用的数据库 updatedb命令解析
【Shell 命令集合 文件管理】Linux 更新locate命令所使用的数据库 updatedb命令解析
153 0
|
1月前
|
开发工具 git
|
2月前
|
安全 Unix Shell
【Linux】Linux系统编程——Linux命令解析器
【Linux】Linux系统编程——Linux命令解析器
48 1
|
2月前
|
安全 网络协议 Linux
Linux网络常用命令解析
Linux网络常用命令解析
29 0
|
3月前
|
安全 Go 开发工具
go clean命令 完全解析
go clean命令 完全解析
115 0
|
4月前
|
Linux
Linux 命令 ps aux 命令解析
Linux 命令 ps aux 命令解析
86 0
|
4月前
|
存储 开发工具 数据库
Git命令大全|必会常用Git命令解析
Git是目前最流行的版本控制工具,熟练掌握Git命令对于开发者来说非常重要。本文收集了常用的Git命令,包括初始化仓库、克隆远程仓库、提交修改等操作,详解每个命令的作用和用法,让您轻松学会使用Git进行版本控制。
230 0

推荐镜像

更多