linux中nohup 与 & 的区别
Linux/Unix下,通常只有守护进程可在脱离终端的情况下能继续执行,而普通进程在关闭终端时会因收到SIGHUP信号(挂起信号)而退出。当终端退出后,由该终端启动的后台程序自动退出。
若想命令在后台运行,则可用 & 指定命令在后台运行;
若想终端退出后程序不停止运行,则可用nohup命令启动后台程序。
nohup(=no hang up),使命令忽略SIGHUP信号;
[语法] nohup Command [ Arg ... ] [&]
[命令输出说明]
Command 的输出如果没有被重定向,则无论是标准输出(stdout),还是标准错误(stderr),均重定向到nohup.out文件;nohup.out文件缺省写在当前目录下,如果在该目录下无写权限,则试图写到$HOME/nohup.out中,如果仍然失败,整个命令执行失败;
Command的输出如果重定向,则写入指定的重定向文件中;
[退出状态]
126 能查找但不能调用 Command 命令;
127 nohup 命令发生错误或找不到 Command 命令;
否则为 Command 命令的退出状态;
nohup与&的区别:
nohup只是让命令忽略SIGHUP命令而已;
&则让命令在后台运行;
至于该命令是否能在脱离终端后继续执行则要看进程是否是守护进程,如果不是,则需要nohup来帮忙;
PS,引用 http://www.cnblogs.com/allenblogs/archive/2011/05/19/2051136.html
---------以下为引用内容
————————————————
nohup -- invoke a utility immune to hangups : 运行命令忽略挂起信号
& 是指后台运行;
nohup 的功能和& 之间的功能并不相同。其中,nohup 可以使得命令永远运行下去和用户终端没有关系。当我们断开ssh 连接的时候不会影响他的运行。而& 表示后台运行。当ssh 断开连接的时候(用户退出或挂起的时候),命令也自动退出。
当然我们可以把两者结合起来使用:
nohup command &
来实现命令的后台运行并且和用户终端没有关系。
由 nohup 文档来看:
If the output file nohup.out cannot be created in the current directory, the nohup utility uses the directory named by HOME to create the file.
表示:nohup 命令执行后,会产生日志文件,把命令的执行中的消息报损到这个文件之中。如果当前文件不可写,那么会自动保存到执行这个命令的home 目录下面。如果是超级管理员root 对应的是/root 目录。
从上面对比我们发现:
1. & 可以使得命令 免疫 ctrl c 的 SIGINT 信号,不能是的命令对 SIGHUP 信号进行免疫。
2. nohup 可以使得命令对两个信号都可以进行免疫。
为了使得 & 达到相同的效果:
我们可以使用如下操作:
如果已经使用 & 命令进行 后台运行。
可以使用disown -h 让任务忽略sighup 信号;
同样不会因为控制台的终端而中断任务。
展示:
断开终端重新登录时:
这样当你在大量备份文件的时候,如果出现断网或者不得不下线的时候。我们可以使用。
ctrl z 挂起任务;disown-h 使得任务 忽略sighup 信号;使用 bg 命令使得命令后台运行。这样就可以放心得下线了。
参考链接:
1. https://blog.csdn.net/zhang_Red/article/details/52789691
2. https://blog.csdn.net/stpeace/article/details/76389073
1.1 nohup
功能:不挂断运行命令
语法:nohup Command [ Arg … ] [ & ]
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。
如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
退出状态:该命令返回下列出口值:
126: 可以查找但不能调用 Command 参数指定的命令。
127: nohup 命令发生错误或不能查找由 Command 参数指定的命令。
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
1.2 &
功能:命令在后台运行,功能与Ctrl+z
相同,一般配合nohup一起使用
eg:nohup ~/user/test.sh>output.log 2>&1 &
命令详解:
nohup ~/user/test.sh>output.log
不挂断运行test.sh
,输出结果重定向到当前目录的output.log
- 最后的
&
表示后台运行 2>&1
0
表示键盘输入,1
屏幕输出即标准输出,2
表示错误输出。其中2>&1
表示将错误信息重定向到标准输出 试想一下,如果2>&1
指将错误信息重定向到标准输出,那2>1
指什么? 分别尝试2>1
,2>&1
$ ls >outfile
$ cat outlog
outlog
test.sh
$ ls xxx>outfile
ls: cannot access xxx: No such file or directory
$ cat outfile
(这里是空)
$ ls xxx 2>1
$ cat 1(可以看出,将错误信息重定向到文件1里面了)
ls: cannot access xxx: No such file or directory
也就是说2>1
会将错误信息重定向到文件1里面,所以2>&1
中的&1
指标准输出
2. 查看后台运行的进程
2.1 jobs的使用
jobs命令用于显示Linux中的任务列表及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号。
语法: jobs(选项)(参数)
选项
-l:显示进程号; -p:仅任务对应的显示进程号; -n:显示任务状态的变化; -r:仅输出运行状态(running)的任务; -s:仅输出停止状态(stoped)的任务。
常用命令: jobs -l


其中,输出信息的第一列表示任务编号,第二列表示任务所对应的进程号,第三列表示任务的运行状态,第四列表示启动任务的命令。
缺点:jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)
2.2 ps的使用
ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
常用命令:ps -aux
a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分
通常与nohup &
配合使用,用于查看后台进程ID 配合 kill命令杀掉程序
常用命令:ps -aux|grep test.sh| grep -v grep
注:grep -v grep
用grep -v参数可以将grep命令排除掉

https://www.cnblogs.com/laoyeye/p/9346330.html
linux中nohup 与 & 的区别的更多相关文章
- Linux中终端和控制台区别
Linux中终端和控制台区别: 终端:英文名叫terminal 控制台:英文名叫console 两者区别要从以前的多人使用的计算机开始 以前,由于计算机很昂贵,所用一台计算机一般由多个人同时使用.这样 ...
- Linux中nohup和&的用法和区别
在Linux执行任务时,如果键入Ctrl+C退出进行其他任务或者关闭当前session 当前任务就会终止 要想不让进程停止或者让进程在后台运行,就需要一些命令,nohup和&就是一种非常好的方 ...
- Linux中ctrl-c, ctrl-z, ctrl-d 区别
在Linux中: ctrl-c: ( kill foreground process ) 发送 SIGINT 信号给前台进程组中的所有进程,强制终止程序的执行: ctrl-z: ( suspend ...
- linux 中的斜杠 ‘/’ ‘\’ 的区别 - 服务器是LINUX的注意了, 和windows 的不一样哦!
ubuntu@ubuntu:~$ vi \> ubuntu@ubuntu:~$ 稍微思考了一下就明白了,不是打不开,问题出在这个文件名" \ "上面. 反斜线符号" ...
- Linux中su和su -区别,别再傻傻分不清
写在前面 如果你不清楚su和su -切换用户的区别,你一定会遇到在使用su切换用户执行命令出现报错"command not found"感到惊讶.分明之前这个指令执行的好好的,为什 ...
- 【Linux】nohup和&的区别
同样都是后台执行进程,但是nohup和&有什么区别呢? & 是指后台运行: nohup 的功能和& 之间的功能并不相同. 其中,nohup 可以使得命令永远运行下去和用户终端没 ...
- linux中 ll 和ls 区别
ll 列出来的结果详细,有时间,是否可读写等信息 ,象windows里的 详细信息ls 只列出文件名或目录名 就象windows里的 列表 ll -t 是降序, ll -t | tac 是升序 l ...
- 关于Linux中nohup.out日志过大问题
背景,java项目,一般在运行JAVA程序时需要用到nohup命令来实现后台启动日志,默认保存在当前目露nohup.out文件.但是有些程序输出nohup文件会出现过大的情况. 在此解决如下: 1,在 ...
- linux中yum与rpm区别
一.源代码形式 1. 绝大多数开源软件都是直接以原码形式发布的 2. 源代码一般会被打成.tar.gz的归档压缩文件 3. 源代码需要编译成为二进制形式之后才能够运行使用 ...
随机推荐
- ionic创建组件、页面或者过滤器
ionic可以直接 用命令来创建组件.页面或者过滤器. 在ionic项目根目录打开命令窗口.输入下列命令: ionic g page pageName //创建新页面 ionic g componen ...
- linux系统crontab
一.cron 简介 在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间. cro ...
- ubuntu升级python版本(3.5 -> 3.6)
#获取最新的python3.6,将其添加至当前apt库中,并自动导入公钥 $ sudo add-apt-repository ppa:jonathonf/python-3.6 $ sudo apt-g ...
- Redux 进阶之 react-redux 和 redux-thunk 的应用
1. react-redux React-Redux 是 Redux 的官方 React 绑定库. React-Redux 能够使你的React组件从Redux store中读取数据,并且向 stor ...
- MATLAB 下GUI的学习
做界面,然后在对应程序里做调用. 0.打开文件:命令行输入 guide 或者 新建——图形用户界面1.文件-预设可以对字体.代码等进行设置.2.工具-GUI选项可以改变行为大小. 3,添加轴,面板,按 ...
- pve配置
U盘安装 推荐使用https://rufus.ie/ 刻录到U盘 (注意:以 DD 镜像 模式写入) 关闭订阅提醒 将if(data.status!=='Active')替换为if(false) se ...
- 项目Beta冲刺(团队6/7)
项目Beta冲刺(团队) --6/7 作业要求: 项目Beta冲刺(团队) 1.团队信息 团队名 :男上加男 成员信息 : 队员学号 队员姓名 个人博客地址 备注 221600427 Alicesft ...
- 跑起来JEE论坛、商城和网站的经验总结
前言:昨天我们老大给我分配了几个任务,让我把几个公司的项目运行起来跑一下,几个项目都是JEE上开源的,三个项目,一个网站内容系统.一个BBS论坛.一个jspgou商城,这三个都是开源的,倒腾了两天,今 ...
- Pros and Cons of Game Based Learning
https://www.gamedesigning.org/learn/game-based-learning/ I remember days gone by at elementary schoo ...
- tomcat和apache的区别--http server vs application server
1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展. 2. Apache和Tomcat都可以做为独立的web服务器来运行,但是A ...