Loading [MathJax]/jax/element/mml/optable/BasicLatin.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >nohup command > out.file 2>&1 & 命令详解

nohup command > out.file 2>&1 & 命令详解

作者头像
saintyyu
发布于 2021-11-22 01:56:58
发布于 2021-11-22 01:56:58
4.5K01
代码可运行
举报
文章被收录于专栏:IT专栏IT专栏
运行总次数:1
代码可运行

nohup

hup是hang up的缩写,是挂断、挂起的意思,而顾名思义,nohup就是不挂断、不挂起的意思。在 Unix 的早期版本中,每个终端都会通过modem和系统通讯。当用户 logout 时,modem就会挂断(hang up)。并且,当modem和系统断开连接时,就会给系统发送hangup信号来通知其关闭该终端打开的所有进程。 而nohup命令的用途就是让该终端提交的命令忽略该hangup信号,从而能够在系统中继续执行。

当然,nohup命令会解除终端和其打开的进程之间的关联,进程会丢掉STDOUT和STDERR的链接。标准输出和标准错误的缺省会导致输出被重定向到nohup.out文件中。所以在使用nohup命令时,我们通常会在命令的结尾加上"&"来将命令同时放入后台运行。当然我们也可以用">out.file 2>&1"来将输出重定向到out.file文件中。

nohup和末尾&的区别:nohup可以使命令脱离终端执行下去,和命令是前台执行还是后台执行没有关系;&是指让命令后台运行,如果没有nohup,当用户退出(挂起)的时候,命令也会跟着退出。

前台任务和后台任务

Threads can be executing in either foreground mode or background mode. A foreground task is one that displays and controls animations on your graphics pages. Any expression (not a command) entered in a property field (that is Text, Rectangle, Buttion, etc.) is executed as a foreground task.

The difference between a background and foreground task is that a background task can be preempted. That is, if system resources are limited, the task (for example, the printing of a report) can pause to allow a higher priority task to be executed. When the task is completed (or when system resources become available) the original task resumes. Foreground tasks are the highest priority and can not be pre-empted.

FD (file descriptor文件描述符)

在 shell 程式中,最常使用的 FD (file descriptor文件描述符) 有三个, 分别是:

0 是一个文件描述符,表示标准输入(stdin)

1是一个文件描述符,表示标准输出(stdout)

2 是一个文件描述符,表示标准错误(stderr)

在标准情况下, 这些FD分别跟如下设备关联:  stdin(0): keyboard 键盘输入,并返回在控制台  stdout(1): monitor 正确返回值 输出到控制台  stderr(2): monitor 错误返回值 输出到控制台

> 重定向符

>是重定向符,就是把前面的输出内容重定向到后面指定的位置(文件),比如>out.file就是将标准输出重定向到out.file文件。

&描述符

& 是一个描述符,如果1或2前不加&,会被当成一个普通文件。

1>&2 意思是把标准输出重定向到标准错误,等价于>&2。

2>&1 意思是把标准错误输出重定向到标准输出。

&>filename 意思是把标准输出和标准错误输出都重定向到文件filename中

command>out.file 2>a 与 command>out.file 2>&1的区别

command 1>out.file 2>&1与command 1>out.file 2>out.file 的区别在于前者只打开一次文件out.file,后者会打开文件两次,并导致stdout被stderr覆盖。&1的含义就可以理解为用标准输出的引用,引用的就是重定向标准输出产生打开的out.file。从IO效率上来讲,command 1>out.file 2>&1比 command 1>out.file 2>out.file的效率更高。

/dev/null

在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF。 在程序员行话,尤其是Unix行话中,/dev/null 被称为位桶(bit bucket)或者黑洞(black hole)。空设备通常被用于丢弃不需要的输出流,或作为用于输入流的空文件。这些操作通常由重定向完成。

在类Unix系统中,想要查询某个文件时,常常会使用如下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
find / -name  fileName

但如果当前账号的权限不够大的化,就会发现查询结果中会有大量的Permission denied,影响我们想看的结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
find: /.DocumentRevisions-V100: Permission denied
find: /.fseventsd: Permission denied

在这种情况下,即使结合grep命令也无法过滤掉这些Permission denied日志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
find / -name  fileName | grep fileName

这个时候,/dev/null就派上用场了,我们可以将错误日志重定向到/dev/null中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
find / -name  fileName 2>/dev/null

/dev/zero

/dev/zero  : 在类UNIX 操作系统中, /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。

其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是创建一个指定长度用于初始化的空文件,像临时交换文件。BSD就是通过mmap把/dev/zero映射到虚地址空间实现共享内存的。可以使用mmap将/dev/zero映射到一个虚拟的内存空间,这个操作的效果等同于使用一段匿名的内存(没有和任何文件相关)。

参考博客:

1、https://blog.csdn.net/longgeaisisi/article/details/90519690 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的区别

2、https://www.cnblogs.com/kcxg/p/11076461.html  Linux里的2>&1究竟是什么

3、https://www.cnblogs.com/jianlilistu/p/9994585.html nohup命令

4、https://blog.csdn.net/Aiyanghong/article/details/89668932 前台任务和后台任务

5、https://blog.csdn.net/ck784101777/article/details/102974382 Linux 下 2>&1 >2& 的理解

6、https://www.cnblogs.com/davygeek/p/5670212.html  Shell特殊变量:Shell # S* ?

7、https://blog.csdn.net/weixin_34301132/article/details/85756456  Linux-hup信号的干扰问题

8、https://blog.csdn.net/longerzone/article/details/12948925 Linux 下的两个特殊的文件 -- /dev/null 和 /dev/zero 简介及对比

9、https://www.cnblogs.com/kex1n/p/7211008.html  linux后台运行和关闭、查看后台任务

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux Shell 1>/dev/null 2>&1 含义
命令的结果可以通过%>的形式来定义输出 /dev/null :代表空设备文件 > :代表重定向到哪里,例如:echo "123" > /home/123.txt 1 :表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null" 2 :表示stderr标准错误 &  :表示等同于的意思,2>&1,表示2的输出重定向等同于1 1 > /dev/null 2>&1 语句含义: 1 > /dev/null : 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。 2>&1 :接着,标准错误输出重定向(等同于)标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
阳光岛主
2019/02/19
3.1K0
部署jar项目服务命令
查看 ps aux | grep 服务关键字 关闭进程,否则启动的时候报错:java.net.BindException: Address already in use kill -9 12148 重启服务 nohup java -jar 微服务.jar &
oktokeep
2024/10/09
1740
Linux 输出重定向 2>&1
nohup /mnt/Nand3/H2000G >/dev/null 2>&1 &
用户2929716
2018/08/23
2.8K0
全网最全Linux 运行jar包的几种方式[通俗易懂]
最常用的启动jar包命令,特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出
全栈程序员站长
2022/11/10
6.2K0
全网最全Linux 运行jar包的几种方式[通俗易懂]
linux的nohup命令
在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台: /usr/local/mysql/bin/mysqld_safe –user=mysql &。可是有很多程序并不想mysqld一样,这样我们就需要nohup命令,怎样使用nohup命令呢?这里讲解nohup命令的一些用法。
全栈程序员站长
2022/11/15
1.9K0
Linux命令之nohup
语法:nohup Command [ Arg ... ] [ & ] 描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。
AsiaYe
2019/11/06
2.4K0
使用systemd添加自定义脚本实现守护进程(daemon)
守护进程是指运行在后台并且独立于控制终端,系统长期运行的后台程序。区别于前台任务、后台任务
用户1392128
2024/01/08
4750
nohup基本使用
兮动人
2024/02/07
5750
UNIX 系统Shell 输入/输出重定向命令
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。
用户5005176
2021/08/10
1.2K0
linux的nohup命令的用法
在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台: /usr/local/mysql/bin/mysqld_safe –user=mysql &。可是有很多程序并不想mysqld一样,这样我们就需要nohup命令,怎样使用nohup命令呢?这里讲解nohup命令的一些用法。
周小董
2019/03/25
3.9K0
Linux重定向
在 Linux 中,重定向是一种将命令的输出或输入重定向到文件或其他命令的机制。它可以用于管理标准输入、标准输出、标准错误等。重定向通常与命令行中的 >、<、>>、2> 等符号一起使用。下面是关于 Linux 重定向的详细说明。
ljw695
2024/10/18
6510
Linux之nohup命令
原文链接:https://rumenz.com/rumenbiji/linux-nohup.html
入门笔记
2021/08/25
2K0
Shell脚本学习3
函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。
用户9645905
2023/10/17
3440
015 Linux 标准输入输出、重定向、管道和后台启动进程命令
IO 重定向是为了改变默认输入、输出的位置,如默认情况下标准输出(STDOUT),标准错误输出(STDERR)都是输出到显示终端,如对标准输出、标准错误输出改变其默认输出位置,可重定向输出到指定的文件中(实际工作中经常这么使用),要重定向就要配合一些语法符号。
落寞的鱼丶
2022/02/21
2.2K0
Linux:Nohup命令详解
在上面的例子中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;
新码农
2020/12/21
14.8K0
Linux:Nohup命令详解
Shell 输入/输出重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。
小小工匠
2021/08/16
1.3K0
Linux||后台运行及查看状态命令
在使用Linux运行程序的时候,常常遇到需要耗费一定时间才能完成的文件,如果在前台运行,此时坐在电脑前的你只能被迫打开其他软件进行摸鱼。
小汪Waud
2023/02/16
8.5K0
Linux||后台运行及查看状态命令
Linux 里的 2>&1 究竟是什么
我们在Linux下经常会碰到nohup command>/dev/null 2>&1 &这样形式的命令。首先我们把这条命令大概分解下:
10JQKA
2019/10/23
8.5K1
shell函数和重定向
# 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
公众号-利志分享
2022/04/25
8730
linux 后台运行进程:& , nohup
当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件。对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨)。为了使这些进程能够在后台运行,也就是说不在终端屏幕上运行,有几种选择方法可供使用。
DevOps在路上
2023/05/16
5.5K0
linux 后台运行进程:& , nohup
相关推荐
Linux Shell 1>/dev/null 2>&1 含义
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档