Linux 后台程序

  • 2018-11-17
  • 167
  • 0
  • 2

用SSH远程连接Linux服务器时,一旦连接断开,正在运行的程序就会立刻退出。究其原因,是因为SIGHUP信号。

SIGHUP信号

SIGHUP信号是传统Unix就支持的不可靠信号(不支持排队,可能造成信号丢失)。

用户远程连接或登录时,会分配一个Session(会话),使用此Session与系统交互。以此Session执行的所有程序都会在连接中断时收到SIGHUP信号并自动退出。

但有的程序可以捕获该信号,并忽略它。这样就算退出登录,后台程序仍会运行。

Linux后台执行方式

1. nohup

启动后台程序

nohup <command> &

其中command为任意想要在后台执行的命令

查看后台工作

jobs

得到如下结果,其中最左边的数字为后台job的id

终止程序

kill <%job-id>

其中job-id为jobs命令中查看的每个job最左边的数字,如kill  %1可终止上述后台程序。注意 job-id前一定要加百分号,否则是杀死对应进程号的进程。

2. screen

screen命令是一种更高级的运行后台程序的方法,其原理就像是linux中打开多个shell终端一样,我们可以创建多个窗口并让每个命令在不同的窗口中独立地运行。

最重要的是,screen中执行的命令不会受到SIGHUP信号影响,因此连接断开后程序能够继续运行。

screen的生命周期随着命令的执行结束而终止,因此想要终止screen,只要中断命令即可(ctrl + c)。

创建screen

screen <command>

查看已有的screen

screen -ls

从当前screen退出(并不终止screen)

在screen中按ctrl+a+d

再次进入screen

screen -r <screen-id>

其中screen-id可在screen -ls命令中得到。

锁定screen(隐藏输入)

在screen中按ctrl + a + s

解锁screen

在screen中按ctrl + a + q

终止screen

在screen中按ctrl + a,再按k

在主窗口中终止screen

screen -X -S <screen-id> quit

   

评论

还没有任何评论,你来说两句吧

您的操作已经越界!

尊敬的站长:您的操作越界导致触发了主题保护界面,想要恢复请联系作者 点击进入

Error:0x01213802

如果并非改动过代码请尝试关闭插件