使用screen管理你的远程会话Linux认证考试

文章作者 100test 发表时间 2010:01:08 18:00:00
来源 100Test.Com百考试题网


  最近遇到登录经常断的问题,所以通过一台跳转机,登录到开发环境,使用screen,真是方便啊。可以保留工作场景,断了的话,下次再通过screen进取也没有问题,原来的工作场景还保留着。
  --------------------------------------------------------------------------------
  你是不是经常需要远程登录到Linux服务器?你是不是经常为一些长时间运行的任务头疼?还在用 nohup 吗?那么来看看 screen 吧,它会给你一个惊喜!
  你是不是经常需要 SSH 或者 telent 远程登录到 Linux 服务器?你是不是经常为一些长时间运行的任务而头疼,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。
  元凶:SIGHUP 信号
  让我们来看看为什么关掉窗口/断开连接会使得正在运行的程序死掉。
  在Linux/Unix中,有这样几个概念:
  进程组(process group):一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的ID。
  会话期(session):一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期ID为首进程的ID。
  会话期可以有一个单独的控制终端(controlling terminal)。与控制终端连接的会话期首进程叫做控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组。
  根据POSIX.1定义:
  挂断信号(SIGHUP)默认的动作是终止程序。
  当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)。
  如果会话期首进程终止,则该信号发送到该会话期前台进程组。
  一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于STOP状态,发送SIGHUP和SIGCONT信号到该进程组中所有进程。
  因此当网络断开或终端窗口关闭后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出。
  我们来看一个例子。打开两个SSH终端窗口,在其中一个运行top命令。
  [root@tivf09 root]# top
  在另一个终端窗口,找到top的进程ID为5180,其父进程ID为5128,即登录shell。
  [root@tivf09 root]# ps -ef|grep toproot 5180 5128 0 01:03 pts/0 00:00:02 toproot 5857 3672 0 01:12 pts/2 00:00:00 grep top
  使用pstree命令可以更清楚地看到这个关系:
  [root@tivf09 root]# pstree -H 5180|grep top|-sshd- -sshd---bash---top
  使用ps-xj命令可以看到,登录shell(PID 5128)和top在同一个会话期,shell为会话期首进程,所在进程组PGID为5128,top所在进程组PGID为5180,为前台进程组。
  [root@tivf09 root]# ps -xj|grep 5128 5126 5128 5128 5128 pts/0 5180 S 0 0:00 -bash 5128 5180 5180 5128 pts/0 5180 S 0 0:50 top 3672 18095 18094 3672 pts/2 18094 S 0 0:00 grep 5128
  关闭第一个SSH窗口,在另一个窗口中可以看到top也被杀掉了。
  [root@tivf09 root]# ps -ef|grep 5128root 18699 3672 0 04:35 pts/2 00:00:00 grep 5128
  如果我们可以忽略SIGHUP信号,关掉窗口应该就不会影响程序的运行了。nohup命令可以达到这个目的,如果程序的标准输出/标准错误是终端,nohup默认将其重定向到nohup.out文件。值得注意的是nohup命令只是使得程序忽略SIGHUP信号,还需要使用标记

相关文章


Linux文件权限的设置技巧Linux认证考试
Linux系统登录后自动执行应用程序Linux认证考试
命令手册:Linux中的ipvsadm命令Linux认证考试
nginx编译openssl版本兼容或排错修复Linux认证考试
使用screen管理你的远程会话Linux认证考试
如何获取linux进程的执行文件路径Linux认证考试
Linux进程内核栈Linux认证考试
一个简单的防止IP攻击的脚本Linux认证考试
solaris10网络配置Linux认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛