0と1でできたブログ

プログラミングなどの個人的なメモ。他の人の参考になれば嬉しいです。

screenコマンドの使い方についてのメモ

お知らせ: 新しくホームページを作りました! これから記事を増やしていくつもりなので, 良かったら見て下さい!! ホームページはこちらになります.

screenコマンドについての使い方メモ。

sshでつないで作業している時に、長時間プログラムを実行するときは、通信が切れてしまいますよね。そんな時に便利なのが、screenです。screenコマンドを使うと、仮想的にTerminalを作れて、任意のタイミングで入ったり出たりできます。(用語的に正しいかは定かでは無いですが、仮想的なTerminalのことを、以下socketと呼びます。)
よって、長時間プログラムを実行するときは、まずsshでリモート環境に入って、screenコマンドでsocket作ります。その上で、プログラムを実行しておいて、そこから出れば、好きなときに入り直せます。そして、プログラムはもちろん中断されません。

ということで、使い方を。
一番単純なのは、

$ screen

とすることです。これでもう新しいsocketができたことになります。では、このsocketを消すために、ctrl+dを押してみましょう。すると、

[screen is terminating]

と表示され、元の画面に戻ったと思います。ただ、これだとさっきのsocketは消えてしまっているので、次はsocketを消さないでsocketから出るようにしましょう。もう一度、screenコマンドを打ってみましょう。そして、次は、ctrl+a, dと押してみてください。今度は、

[detached]

と表示され、また元の画面に戻ったと思います。では、さっきのsocketが残っているか確認するために、

$ screen -ls

と打ってみましょう。自分の環境では、以下のように表示されました。

There is a screen on:
    23277.ttys001.hogehoge  (Detached)
1 Socket in ・・・

(hogehogeは自分のパソコンの名前になると思います。1 Socket inの後の点々の部分には、このソケットが保存されている場所が表示されています。)
さて、socketの名前が一つ書いてあって、その右に(Detached)と書いてあります。これは、socketを離れていることを示します。ということで、うまくいっていますね。ちなみに、socketが無いときは、

No Sockets found in ・・・

と表示されます。

では、detachしたsocketに戻ってみましょう。今回の場合、socketの名前が、23277.tty001.hogehogeとなっているので、以下のような戻り方があります。

$ screen -r
$ screen -r 23277
$ screen -r tty001
$ screen -r 23277.tty001

もちろん、23277.tty001.hogehogeと、名前全体を書いてもいいのですが、めんどくさいです。一番上が明らかに簡単ですが、これは、socketの数が1つの時だけ可能な書き方になります。また、複数作った時に、tty001などがかぶった場合は、3つめの書き方ではダメです。名前の、番号の部分はおそらくかぶらないので、(経験的にかぶって無いだけなので、確証はないです)2つめが割りとらくだと思います。では、次に自分で好きな名前をつけてみましょう。自分で名前をつけることのメリットは、

  • 何をやっているsocketかをわかりやすくできる。
  • screen -r socket-nameみたいにできるので、戻りやすい。

では、実践として、次にように打ってみましょう。

$ screen -S test

確認してみると、自分は以下の様なsocketができていました。

23440.test    (Detached)

この場合、作ったsocketに戻るのには、

$ screen -r test

すればいいことになります。もちろん番号でも大丈夫です。

基本はこんな感じです。では、最後にsocketを外から消す方法を書きます。
自分で指定した名前のsocketを消したい場合は、

$ screen -S socke-name -X quit

として(scket-nameのところに消したいsocketの名前をいれます。-rの時みたいに、番号だけとかで大丈夫です)、socketが一つしか無い場合は、

$ screen -r -X quit

とすれば消えます。
また、一気に全て消したい場合は、socketが保存されているフォルダ(screen -ls で表示させた時に、書いてある場所)の中身を全て消すとsocketを消せます。
以上、screenコマンドの使い方解説でした。


記事とは関係ないのですが,webアプリケーション開発の練習で,まとめのまとめサイトを作ってみたので,よろしければ見てみてください. (いろんなまとめのまとめ, 恋愛・結婚の2chまとめサイトのまとめ)