Linux中nohup的使用

之前因为需求,搭建的一个后台程序需要在Linux的服务器上挂载,在Linux服务器中,想要在后台运行程序,需要使用nohup命令来运行。

nohup命令

nohup的意思就是不挂断地运行命令,是no hang up的缩写,nohup命令忽略所有的挂断信号(SIGHUP)
语法

nohup Command [ Arg ... ] [ & ]

其中Command是指运行程序的命令,例如若要运行test.py程序,则Command部分就是python3 test.py

&

&是将进程提交到后台运行的命令,这样你就可以在控制台终端做其他事情,但是当把当前控制台(终端)关闭(退出账户)时,进程就会停止运行。
而nohup命令,可以保护进程在退出账户,释放连接后继续运行,所以使用该命令一般的形式是:

nohup command &

&让进程转至后台运行,nohup让进程不会由于退出账户停止。

而如果想让进程停止,可以通过使用ps -ef来查看进程的pid。
然后kill掉pid来结束进程。

为什么关闭SSH连接,程序就停止运行?

要想回答这个问题,首先需要知道在Linux系统下有这两个概念:
进程组:一个或者多个进程的集合,每一个进程组都有唯一一个进程组ID,即进程组长进程的ID。
会话期:一个或多个进程组的集合,有唯一一个会话期首进程。会话期ID为首进程的ID。
会话期可以有一个单独的控制终端。与控制终端连接的会话期首进程叫做控制进程。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组。

挂断信号(SIGHUP)默认的动作是终止程序。
当终端接口检测到网络连接断开,将挂断信号发送给控制进程。
如果控制进程终止,则该信号发送到该会话期前台进程组。

结论:因此当网络断开或终端窗口关闭后,也就是SSH断开以后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出。

也就是说:当SSH连接开启的时候,bash等都会成为其进程组成员,当ssh关闭后,系统会将所有相关进程kill掉。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值