linux下nohup和&的区别与联系

nohup和&都可以在执行命令时使用,用法为:[nohup] command [&]

command &代表让command在以后台进程的方式运行。

通过ssh登录远程服务器后,会得到一个终端,这个终端提供了标准输入以及输出。例如执行pwd命令得到当前工作目录,pwd即是标准输入,而终端上显示的工作目录即是标准输出。像pwd或者ps -ef这种直接在终端上执行的命令,产生的是前台进程。前台进程在执行的过程中会“独占”终端的标准输入,即此时无法再在终端上输入命令,必须等待前台进程执行完毕;而命令若以后台进程的方式运行则不会独占终端的标准输入,通常在执行一些耗时的命令时会采用后台执行的方式,例如执行一个web程序,跑一段数据库脚本等。

nohup command代表让进程在执行的过程中忽略sighup信号,同时默认将进程产生的输出重定向到nohup.out文件中

当退出或关闭终端时,所有与终端相关的前台进程或后台进程都会收到sighup信号,进程收到sighup信号后默认的处理是结束进程。如果要在远程服务器上起一个web进程,并让其一直运行的话,最好在命令前面加上nohup,否则当关闭终端时,前面起的web进程会收到sighup信号而终止运行。另外若仅以”command &“执行命令,那么其所产生的标准输出还是会出现在终端中,影响了用终端做其他事情,在前面加上nohup即可让进程将输出重定向到nohup.out文件中

为什么说”最好加上nohup“呢,因为若web进程的父进程在关闭终端前就已经结束运行,那么该web进程会作为孤儿进程被init进程收养,此时web进程不再和终端相关,也不会再因终端关闭而收到sighup信号,这里不加上nohup也没关系;但若web进程的父进程在关闭终端时还在运行,如执行以下启动脚本run.sh:

#!/bin/bash
#启动耗时的web程序
sh webApp.sh &
#查看相关日志
tail -f log

由于”tail -f log“会一直运行,导致作为”sh webApp.sh“ 进程的父进程"./run.sh"也会一直运行,若此时关闭终端,那么”sh webApp.sh“ 进程则会收到sighup信号而终止

因此还是用nohup command &的方式执行耗时命令最为稳妥

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值