本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
之前我想在我的服务器上执行一个长时间运行的任务,我使用x &
挂在后台,并使用nohup x &
请求shell结束后不清理命令,并且为防止父进程结束,又使用了setsid x &
置父程序id为1。SSH会话被终止,但我再次连上去时使用jobs
并没有出现我之前的程序。
所幸,我发现了linux上的screen程序,非常好用。
介绍
"Screen or GNU Screen is a terminal multiplexer."也就是说Screen是一款终端复用器。我们可以开始一个screen会话,然后在里面可以打开任意数量的虚拟终端。在Screen中运行的进程将在其窗口不可见时继续运行,即使断开SSH连接。
至于安装就很简单,在Centos上只需要运行:
sudo yum install screen
使用
对于screen你需要命名,以区分你的任务。
screen -S session_name
而使用:
screen -ls
则可以查看screen session的id,以便后面的使用。
使用:
screen -r id
则重新进入之前创建的session里面。
具体命令
我们进入screen session后,可以使用 Ctr+a
然后 ?
查看screen的命令:
非常的清晰
一般我们会使用:
detach:ctrl+a d
kill: ctrl+a k
history: ctrl+a { }
clear:ctrl+a C
windowslist:ctrl+a "
列出所有窗口。
split: ctrl+a S
将当前区域水平分割成两个区域。
other: ctrl+a ctrl+a
在当前窗口和以前窗口之间切换。
而0-9在screen里面则可以跳转到session窗口。
screen 设置
当screen开始时,它会从/etc/screenrc
和~/.screenrc
读取它的设置参数。我们可以根据这两个文件更改默认screen设置。
如果没有~/.screenrc
的话,可以创建,用来自定义配置。
以上就是screen的介绍和使用内容。
结束
当我们想要kill一个screen的时候,可以直接用这个命令:
screen -S session_name -X quit
此外,深入的学习请点击screen指南