[原创] Linux 中的 nohup 与 &
背景
一直没搞清楚 nohup
与 &
的区别, 看着公司里遗留的shell, 也就稀里糊涂地用着... 这是很糟糕的态度
结论放前面
&
使进程在后台运行, 默认输出到标准输出(即当前屏幕), 除非重定向输出.
此时忽略 SIGINT 信号.
若关闭会话, 则进程会结束
nohup
进程仍旧在前台跑, 默认输出到 nohup.out
.
此时进程忽略 SIGHUP 信号, 关闭会话不影响进程.
Ctrl+c
会使进程中断
nohup
+ &
进程在后台跑, 忽略 SIGINT, SIGHUP 信号.
测试
repeat=${1:-20}
echo 循环次数 $repeat
counter=0
while [ $counter -lt $repeat ]
do
echo 第${counter}次循环
let "counter ++"
sleep 1
done
echo 结束循环
直接运行
[root@yjx214 tmp]# sh test.sh
循环次数 20
第0次循环
第1次循环
第2次循环
^C
此时不论是直接 Ctrl+c
或 关闭当前ssh连接, 都会导致进程停止
[root@yjx214 tmp]# sh test.sh > test.out
^C
此时进程仍在前端跑, 查看 test.out
文件会发现在输出, 此时不论是直接 Ctrl+C
或 关闭当前ssh连接, 都会导致进程停止
单独使用 &
[root@yjx214 tmp]# sh test.sh &
[1] 111418
[root@yjx214 tmp]# 循环次数 20
第0次循环
第1次循环
第2次循环
^C
[root@yjx214 tmp]# 第3次循环
第4次循环
第5次循环
^C
[root@yjx214 tmp]# 第6次循环
第7次循环
第8次循环
第9次循环
第10次循环
第11次循环
此时进程在后台跑, 同时默认会输出到屏幕上.
此时 Ctrl+c
无效, 即进程忽略了 SIGINT 信号.
但若是直接关闭ssh连接(会话), 则该进程会被关闭, 这是因为进程受到了 SIGHUP 信号影响.
系统对SIGHUP信号的默认处理是终止收到该信号的进程。所以若程序中没有捕捉该信号,当收到该信号时,进程就会退出。
[root@yjx214 tmp]# sh test.sh > test.out &
[4] 111758
[root@yjx214 tmp]#
使进程在后台跑, 输出被重定向到指定文件
可用 jobs -l
获取当前的所有后台进程
[root@yjx214 tmp]# jobs -l
[2]+ 113043 Running sh test.sh > /dev/null &
单独使用 nohup
[root@yjx214 tmp]# nohup sh test.sh > test.out 2>&1
运行后是在前端跑, 若关闭会话, 进程不受影响.
但此时 Ctrl+c
会结束进程.
nohup
+ &
[root@yjx214 tmp]# nohup sh test.sh &
[2] 112987
[root@yjx214 tmp]# nohup: 忽略输入并把输出追加到"nohup.out"
[root@yjx214 tmp]#
忽略 Ctrl+c
以及 会话关闭的影响, 进程可以在后台持续运行.
若会话未关闭, 可通过 jobs -l
查看当前该进程
[root@yjx214 tmp]# jobs -l
[1]+ 112987 Running nohup sh test.sh &
[原创] Linux 中的 nohup 与 &的更多相关文章
- nohup在linux中的挂起
笔者也是一个linux新手,最近在学习linux相关的东西,本人是一个node爱好者,想在linux上写一个linux服务,我的环境是centeros7,用putty链接远端的服务器,要想让服务在服务 ...
- linux中nohup 与 & 的区别
Linux/Unix下,通常只有守护进程可在脱离终端的情况下能继续执行,而普通进程在关闭终端时会因收到SIGHUP信号(挂起信号)而退出.当终端退出后,由该终端启动的后台程序自动退出. 若想命令在后台 ...
- Linux中nohup和&的用法和区别
在Linux执行任务时,如果键入Ctrl+C退出进行其他任务或者关闭当前session 当前任务就会终止 要想不让进程停止或者让进程在后台运行,就需要一些命令,nohup和&就是一种非常好的方 ...
- 关于Linux中nohup.out日志过大问题
背景,java项目,一般在运行JAVA程序时需要用到nohup命令来实现后台启动日志,默认保存在当前目露nohup.out文件.但是有些程序输出nohup文件会出现过大的情况. 在此解决如下: 1,在 ...
- (原创)Windows下编译的Shell脚本不能再Linux中运行的解决办法
一.原理 Windows编译的文件和Linux编译的文件格式不太一样,导致在Linux运行Shell脚本的时候会提示:/bin/bash^M: bad interpreter: 没有那个文件或目录. ...
- Linux命令:nohup、df、du与/dev/null
早上开始工作时发现服务器挂掉了,重启TongWeb时有报错: 上面的红框圈错了,第一个红框的下一行: java.io.IOException: No Space left on device 我们用d ...
- 【java】 linux下利用nohup后台运行jar文件包程序
Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...
- Linux有问必答:如何在Linux中修改环境变量PATH
提问: 当我试着运行一个程序时,它提示“command not found”. 但这个程序就在/usr/local/bin下.我该如何添加/usr/local/bin到我的PATH变量下,这样我就可以 ...
- 在 Linux 中怎样将 MySQL 迁移到 MariaDB 上
自从甲骨文收购 MySQL 后,由于甲骨文对 MySQL 的开发和维护更多倾向于闭门的立场,很多 MySQL 的开发者和用户放弃了 MySQL.在社区驱动下,促使更多人移到 MySQL 的另一个叫 M ...
随机推荐
- ubuntu下搭建android开发环境
注意: google可能被和谐了,那就修改hosts sudo vim /etc/hosts 增加: #Google主页 203.208.46.146 www.google.com #这行是为了方便打 ...
- tyvj P3737 逐个击破
http://tyvj.cn/p/3737 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 秉承伟大军事家的战略思想,作为一个有智慧的军长你,遇到了一个类似的 ...
- A*搜索 概念
启发式搜索:启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标.这样可以省略大量无畏的搜索路径,提到了效率.在启发式搜索中,对位置的估价是十分重要 ...
- combotree 满足条件的节点不可选中
combotree: $("#Parent").treegrid("unselect");
- efcore dbfirst 通过数据库表反向生成model
创建class library并设置为启动项目 使用nuget控制台,设置当前项目为新建的class library Install-Package Microsoft.EntityFramework ...
- C++获取字符串长度数
strlen,获取到的是字节数,中文占两个字节. 如何获取字符数,无论中文英文,标点符号,都按一个字符计算呢?这里提供其中的一个方法.那就是通过MultiByteToWideChar函数,将CStri ...
- [原创]SOUI GDI+渲染引擎下的字体特效,抛砖引玉
由于SOUI是一种双渲染引擎的DUI库,默认在SKIA渲染引擎下是支持特效字体的,具体请参考DEMO中的源码. 但是使用GDI+渲染时是没有这些特效的,着实比较苦恼,此代抛砖引玉,细节实现 请自己再去 ...
- sublime 3插件安装记录
安装sublime 3的package control管理器: 从菜单 View - Show Console 或者 ctrl + ~ 快捷键,调出 console.将以下 Python 代码粘贴进去 ...
- ecshop后台登录频繁自动退出问题终极解决方法集锦
ecshop后台登录后,有时候会自动退出,而且还会很频繁,有的是后台操作两下就莫名退出了,有的是恰好三分钟左右登出.这让管理员很恼火,严重影响了后台使用.对于这一问题,网络上可给的解决方法各有不同.千 ...
- TextView 垂直居中
需要区分的是这里的top,bottom,ascent,descent,baseline是指字内容的属性,通过getPaint().getFontMetricsInt()来获取得到.和字体内容的外部容 ...