Wednesday, November 19, 2008

Screen 小结

screen在mitbbs的linux版上被称为震版之宝。minhong推荐下我用了一下,果然非常好用。
这里先占坑。

基本用法:
  1. 在term下键入screen。会出现一些提示,然后就是先前的shell。这时候与普通shell的唯一区别在于你可以使用ctrl+a d (先按ctrl + a, 然后按d)退出这个screen session。这个session以及在这个session中运行的程序将在没有你的监督下继续运行,哪怕你是远程登录到这台主机上而远程登录又中断了。
  2. 查看当前主机上运行了多少个session, 以及每个session叫什么名字:
    screen -ls
  3. 继续一个离开了的session.如果当前只有一个session,那么直接输入
    screen -r
    如果有多个session, 而你要重入其中的一个:
    screen -r sessionname
  4. 进入一个session后, 键入ctrl+a k 终止当前session. 不像ctrl+a d只是离开这个session, 使用了ctrl+a k之后你就无法再次重入这个session了
  5. screen -S your_fav_name -d your_cmd:新建一个名为your_fav_name的screen会话并执行你的命令.为一个会话起一个名字的好处包括用这个名字来kill掉这个会话,而不用每次都先screen -ls看你这个会话的id.
注意事项:
  1. 在远程主机上执行screen: 如果你是ssh到远程主机上并直接用screen 执行一个命令,比如:ssh user@host screen cmd,有可能得到Must be connected to a terminal.这个错误。 解决方法:使用 ssh的-t选项
  2. 杀死远端的screen进程:当你远程主机使用screen在执行一个命令的时候,你可以登录到这个主机并resume你的screen会话并用ctrl+a k杀死该会话。但是这样要求手动控制而无法使用脚本。一个解决办法是用: "screen -S sessionid -X quit" 向远端主机发送screen窗口命令cmd 。 比如quit的话就是结束这个session。
  3. detach远端的screen 进程。 比如你回家之前在office的机器上用screen执行一个命令且没有detach。当你从家里登录office机器想resume则会被告知,该session没有被detach你无法直接在家resume进去。可以发送用: "screen -S sessionid -X detach"命令过去将其detach,然后再实现重入。
  4. 输入backspace的时候总是出现“Wuff Wuff!“这样的讨厌提示。以及del/backspace工作不正常。可以参见http://ubuntuforums.org/archive/index.php/t-90910.html .我的经验是设置TERM变量。bash 底下可以alias screen='TERM=screen screen',tcsh底下可以alias screen 'env TERM=screen screen'

No comments: