やぐブロ

yag + programming + hateblo

screenがdetachできないときはsshdプロセスを殺す

生きているはずのscreenセッションがdetachできない問題.回線が落ちたのにscreenが自動でdetachされないというのは時々あるが,今回の場合はいくらscreen -dしてもdetachされない.非常に厄介だ.

現状確認

screenの状態を確認してscreen -dでdetachするも,効果がない.

$ screen -ls
There is a screen on:
	1028.pts-19.hoge	(Attached)
1 Socket in /var/run/uscreens/yag_ays

$ screen -d
[1028.pts-19.hoge detached.]

$ screen -ls
There is a screen on:
	1028.pts-19.hoge	(Attached)
1 Socket in /var/run/uscreens/yag_ays

解決

screenを開いているsshdが生きていることが原因のようなので,一度killで落としてから再度screen -d; screen -Rすることで問題を解消できる.

$ ps x | grep sshd
22147 pts/25   S+     0:00 grep sshd
29364 ?        S      0:00 sshd: yag_ays@pts/17                            
30928 ?        S      0:00 sshd: yag_ays@pts/25 
$ kill -9 29364
$ screen -d
$ screen -R

これでscreenセッションを復旧することができる.間違っても新しい方のsshdを消してしまわない様に....

これは恐らく,sshで多段ログインしている環境で回線が落ちると,何らかの原因で多段先にログインしているサーバにSIGHUPが送られないからだと思われる.これに関しては対策ができなさそうなので,screenをきっちりdetachしてから落ちるなどして日頃注意しておくしかないか....

注意

今回示したscreenがdetachできないというケースは非常特殊な環境下で頻発しているものであり,普通に設定しているサーバなら滅多に起こらない現象だと思う.