screenコマンドでログアウト後も処理を実行し続ける

概要

コマンドを実行した後、処理が終わるまでログアウト出来なかったりターミナルを閉じられなくなったりします。
そんな時はscreenコマンドを使うとターミナルを閉じたりログアウトしても処理を実行したままに出来ます。

環境

CentOS 7.1.1503


インストール

yum install screen.x86_64


使い方

セッションの開始

長時間かかる処理の前にscreenコマンドを実行します。

screen 

実行後、ターミナルが切り替わります。

長時間かかる処理を実行

試しにdateコマンドを無限ループさせてずっと実行させてみます。

while true; do date; sleep 1; done


表示例

Fri May 22 00:00:01 JST 2015
Fri May 22 00:00:02 JST 2015
Fri May 22 00:00:03 JST 2015
Fri May 22 00:00:04 JST 2015
Fri May 22 00:00:05 JST 2015

こんな感じで1秒ごとにdateコマンドが実行され結果が表示され続けます。

セッションのデタッチ(切断)

dateコマンドを実行したままセッションを終了します。
Ctrl + a + d
セッションが終了してscreenコマンド実行前のターミナル画面に戻ります。

こうなったらターミナルを閉じても大丈夫です。
後で再接続可能です。

セッションのアタッチ(再接続)

ターミナルを立ち上げ直して先程実行したセッションに再接続します。

screen -r

実行後先程実行しっぱなしだったdateコマンドの結果が表示され続けていると思います。

セッション一覧表示
screen -ls


表示例

[kenichi@tsunokawa ~]$ screen -ls
There is a screen on:
	17881.pts-0.tsunokawa	(Detached)
1 Socket in /var/run/screen/S-kenichi.

[kenichi@tsunokawa ~]$ 


セッションIDを指定して再接続

screen -lsで出力されたIDを指定して再接続します。

screen -r 17881.pts-0.tsunokawa


セッションを終了する場合

実行させていた処理が終わってscreenのセッションが不要になった場合は
Ctrl + d
もしくは

$ logout

ログアウトすれば終了します。