前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nohup command > out.file 2>&1 & 命令详解

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

作者头像
saintyyu
发布2021-11-22 09:56:58
3K0
发布2021-11-22 09:56:58
举报
文章被收录于专栏:IT专栏

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
复制
find / -name  fileName

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

代码语言:javascript
复制
find: /.DocumentRevisions-V100: Permission denied
find: /.fseventsd: Permission denied

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

代码语言:javascript
复制
find / -name  fileName | grep fileName

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

代码语言:javascript
复制
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 0 # 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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • nohup
  • 前台任务和后台任务
  • FD (file descriptor文件描述符)
  • > 重定向符
  • &描述符
  • command>out.file 2>a 与 command>out.file 2>&1的区别
  • /dev/null
  • /dev/zero
    • 参考博客:
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档