VSCode Remote Developmentの無限ループへの対処
2021/10/02 記事下部に追記あり
VSCodeのRemote Developmentはめちゃくちゃ便利なのだけど、たまにSSH先で生きているvscode-serverのプロセスがゾンビになってしまい、そのゾンビがいる状態のサーバにRemote Developmentで繋ごうとするとretry loopにハマってしまうことがある。
これは大体の場合、待っても解決しない。
自分の知る限り、ゾンビプロセスをkill
してあげると適切に動作するようになるので、vscode-serverのプロセスのプロセスidがわかればいい。
というわけで、解決法は以下の通り。
pgrep -f vscode-server | xargs kill
pgrep
は実行中のプロセスの名前とかを使ってプロセスidを取得できるコマンド。-f
オプションを渡すことで、あるプロセスを実行するときにシェルに渡した文字列を全部対象としたgrepをしてくれるみたい。
vscode-serverのプロセスはsh /home/hoge/.vscode-server/bin/xxxxxxxxxxxxxxxxxxxxxxxx/server.sh --start-server --host=127.0.0.1 --enable-remote-auto-shutdown --port=0 --connection-secret
みたいな感じで実行されているようなので、これでvscode-serverという部分文字列に対してマッチしたプロセスのプロセスidを取得できる。
xargs
は各行に対して同じコマンドを実行するだけ(並行処理とかもっといろいろできるけど、今回はこれだけ)。
おわり。
追記
VSCodeの設定でこれを抑制できそうなことがわかった。
ホームディレクトリがNFSに載っていたりすると、サーバ立ち上げの際の一時ファイルの作成の時に、デッドロックが発生してしまって無限ループするっぽいかな?
/tmp
などのNFSに通常載せないディレクトリをロック用一時ファイルの置き場所にすると根本解決しそうだった。
設定方法は、以下の画像の Remote.SSH: Lockfiles in Tmp
にチェックマークを入れること。
参考にしたIssue
参考
Discussion
助かりましたぁ!!!