背景

一直没搞清楚 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 与 &的更多相关文章

  1. nohup在linux中的挂起

    笔者也是一个linux新手,最近在学习linux相关的东西,本人是一个node爱好者,想在linux上写一个linux服务,我的环境是centeros7,用putty链接远端的服务器,要想让服务在服务 ...

  2. linux中nohup 与 & 的区别

    Linux/Unix下,通常只有守护进程可在脱离终端的情况下能继续执行,而普通进程在关闭终端时会因收到SIGHUP信号(挂起信号)而退出.当终端退出后,由该终端启动的后台程序自动退出. 若想命令在后台 ...

  3. Linux中nohup和&的用法和区别

    在Linux执行任务时,如果键入Ctrl+C退出进行其他任务或者关闭当前session 当前任务就会终止 要想不让进程停止或者让进程在后台运行,就需要一些命令,nohup和&就是一种非常好的方 ...

  4. 关于Linux中nohup.out日志过大问题

    背景,java项目,一般在运行JAVA程序时需要用到nohup命令来实现后台启动日志,默认保存在当前目露nohup.out文件.但是有些程序输出nohup文件会出现过大的情况. 在此解决如下: 1,在 ...

  5. (原创)Windows下编译的Shell脚本不能再Linux中运行的解决办法

    一.原理 Windows编译的文件和Linux编译的文件格式不太一样,导致在Linux运行Shell脚本的时候会提示:/bin/bash^M: bad interpreter: 没有那个文件或目录. ...

  6. Linux命令:nohup、df、du与/dev/null

    早上开始工作时发现服务器挂掉了,重启TongWeb时有报错: 上面的红框圈错了,第一个红框的下一行: java.io.IOException: No Space left on device 我们用d ...

  7. 【java】 linux下利用nohup后台运行jar文件包程序

    Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...

  8. Linux有问必答:如何在Linux中修改环境变量PATH

    提问: 当我试着运行一个程序时,它提示“command not found”. 但这个程序就在/usr/local/bin下.我该如何添加/usr/local/bin到我的PATH变量下,这样我就可以 ...

  9. 在 Linux 中怎样将 MySQL 迁移到 MariaDB 上

    自从甲骨文收购 MySQL 后,由于甲骨文对 MySQL 的开发和维护更多倾向于闭门的立场,很多 MySQL 的开发者和用户放弃了 MySQL.在社区驱动下,促使更多人移到 MySQL 的另一个叫 M ...

随机推荐

  1. sudo问题汇总

    1. 注释Defaults requiretty Defaults requiretty修改为 #Defaults requiretty, 表示不需要控制终端. 否则会出现sudo: sorry, y ...

  2. javascript对变量和函数的声明提前‘hoist’

    hoist vt.升起,提起; vi.被举起或抬高; n.起重机,升降机; 升起; <俚>推,托,举; 原文地址:http://www.bootcss.com/article/variab ...

  3. Openssl dsaparam命令

    一.简介 dsaparam指令用来生成和操作dsa参数 二.语法 openssl dsaparam [-inform DER|PEM] [-outform DER|PEM] [-in filename ...

  4. String.getBytes()[转]

    在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组.这个表示在不通OS下,返回的东西不一样! String.getBytes(String decode)方 ...

  5. [C++] Pen questions & linux cmd

    1.宏替换,完全展开替换,注意带来副作用 #include <stdio.h>#define 打印语句 printf(“hello”); Void main(void) { If (1) ...

  6. libpcap编程实例

    #include <stdio.h> #include <stdlib.h> #include <pcap.h> #include <errno.h> ...

  7. EZOJ #226

    传送门 分析 我们可以建一个k层图,把dp转移的三维对应到每个点上,每个第k层点连向0层点 我们让第0层点为实点其余为虚点,只要碰到虚点就dfs到他连得所有实点再将实点入队即可 代码 #include ...

  8. clickonce发布winform必备组件

    ClickOnce 发布,在系统必备中勾选了 .NET Framework 4,并选择了"从与我的应用程序相同的位置下载系统必备组件"时,执行发布,会提示缺少很多文件 使用 Pac ...

  9. Qt的翻译文件QTranslator不能使用问题总结(原)

    笔者今天在自己工程中使用翻译文件,发现没有起作用,反复查找,发现是用宏定义了命名空间,生成.ts文件时,不会加上命名空间,所以生成的.qm文件在实际使用时,会无法找到对应的语句. 如果将宏定义的命名空 ...

  10. Yii2 中国省市区三级联动

    1.获取源码:https://github.com/chenkby/yii2-region 2.安装 添加到你的composer.json文件 "chenkby/yii2-region&qu ...