🍿

VSCode Remote Developmentの無限ループへの対処

2021/05/01に公開
1

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

https://github.com/microsoft/vscode-remote-release/issues/2605

参考

https://github.com/microsoft/vscode-remote-release/issues/2162

https://stackoverflow.com/questions/25751030/how-to-get-only-process-id-in-specify-process-name-in-linux

Discussion