使用screen管理远程会话断开连接后程序仍然继续在后台执行

使用screen管理远程会话断开连接后程序仍然继续在后台执行 今晚进行数据库迁移操作,耗时有些长,担心终端异常中断导致转移程序中断而半途而废。因此考虑开screen来跑迁移程序。 如果终端异常断开,或网络中断,远程会话运行的程序就会中断。解决的办法有: 1.使用nohup命令 2.使用screen命令 用ssh连接服务器进行一些需要长时间运行的任务开一个远程终端窗口,在此期间是不能关掉窗口或断开连接,否则这些任务将被中断执行。 下面来看看关掉窗口或断开连接会使正在运行的任务中断的原因: 进程组:一个或多个进程的集合,每一个进程组有唯一一个进程ID 会话期:一个或多个进程组的集合,有唯一一个会话期首进程 会话期可以有一个单独的控制终端,与控制终端连接的会话期首进程叫做控制进程,当前与终端交互的进程为前台进程组,其余进程组称为后台进程组 挂断信号(SIGHUP)默认的动作是终止程序。 当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)。 如果会话期首进程终止,则该信号发送到该会话期前台进程组。 一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于STOP状态,发送SIGHUP和SIGCONT信号到该进程组中所有进程。 因此,当网络中断或关掉终端窗口,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出。 使用screen Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。创建screen窗口的方式: 1.直接输入screen命令 # screen 将创建一个执行shell的窗口,任意执行程序。输入exit命令将退出当前窗口。 2.在screen命令后跟上要执行的程序 # screen php move_security_log.php 3.在一个已有的screen会话中创建新的窗口。在当前screen窗口中键入ctrl+A+C,在该会话内生成一个新的窗口并切换到该窗口。还可以不中断screen窗口中运行的程序而暂时端口screen会话,并可以在随后重新连接该会话。如: 暂时中断会话:Ctrl+A+D 重新连接会话: # screen -ls There is a screen on: 836.pts-3.ubuntu (04/09/2012 01:53:53 AM) (Detached) # screen -r 836 默认情况下,screen接收的命令是以Ctrl+A开头的。 不再解释了,具体看man screen. 转载请注明出处:http://www.ttlsa.com/html/1243.html

你可能感兴趣的:(linux,secureCRT,ssh,nohup,会话,终端,screen,SIGHUP,SIGCONT,开screen)