GNU ScreenでWindowの中で別のSessionにAttachしてしまった時にdetachする方法
自分はtmuxではなくGNU Screenを使っています。
いくつかSessionを持っていて「本番鯖管理用Session」「テス鯖とか日常作業用Session」などなど。
あるとき、作業用Sessionの中で間違えて本番管理用SessionにAttachしてしまいました。
Screen in Screenです。
とりあえずdetachしようと思ってz-dしましたが(escape ^Zz設定)、親の作業用Sessionがdetachされてしまいます。
子の本番用Sessionだけをdetachしたい場合どうすればよいでしょうか。
とりあえず考えたのはもう1本そのサーバーにSSHを貼ってそこから本番用Sessionにattachすることです。
-xオプションで入らない限り、ScreenのSessionは排他ですし上手いこと日常作業用Sessionの方が抜けてくれます。
他に方法がないかなと探したら、ありました。
How do you detach the 2nd screen from within another screen? - Unix & Linux Stack Exchange
ctrl-a a d
だそうで。
僕の環境で言えばctrl-z z a
ですね。
ctrl-z z
することで子のSessionにコマンドを投げる状態に出来るので、そこにdetachコマンドを投げることで子のSessionのみをdetachすることが出来るようになるみたいです。
たまにやらかしちゃう時があるので覚えておいて損はないなと思いました。
※追記
子のSessionにコマンドを投げるというのは正しくなく、screen内部にコマンド文字を投げるというのが正しいようです。
escapeの2番目の文字はコマンドを投げれるというかコマンド文字をscreen内部のプロセスに送る、ですかね。screenデフォルトの設定でbashのカーソルを先頭行に移動したいときはC-A aとかしますね。
— Kazuhiro YOSHIKAWA (@yoshikaw) 2014, 6月 29