如何在Ubuntu主机上终止VSCode远程服务

44

我刚刚更新了VSCode Remote Insider,但是现在无法通过VSCode连接到我的主机。

我尝试卸载本地的VSCode Insider并重新启动它,但没有帮助。然后,我删除了我的主机上的.vscode-remote-insider目录。但是,由于旧服务仍在运行,VSCode远程无法重新安装远程服务。以下是本地VSCode客户端的输出。

remote-ssh@0.44.0
win32 x64
SSH Resolver called for "ssh-remote", attempt 1
SSH Resolver called for host: 121
Setting up SSH remote "121"
Using commit id "c089daa858f34631f5f827ff8a0313bf1e2ded6d" and quality "insider" for server
Testing ssh with ssh -V
ssh exited with code: 0
Got stderr from ssh: OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4
Install and start server if needed
> 
> Installing to /home/***/.vscode-server-insiders/bin/c089daa858f34631f5f827ff8a0313bf1e2ded6d...
> 
> Downloading with wget
> 
> Download complete
> 
> Found running server...
> 
> *
> * Reminder: You may only use this software with Visual Studio family products,
> 
> * as described in the license (https://go.microsoft.com/fwlink/?linkid=2077057)
> *
> 
> Server did not start successfully. Full server log >>>
> <<< End of server log
> cat: /home/***/.vscode-server-insiders/.c089daa858f34631f5f827ff8a0313bf1e2ded6d.log: No such file or directory
> cat: /home/***/.vscode-server-insiders/.c089daa858f34631f5f827ff8a0313bf1e2ded6d.log: No such file or directory
> cat: /home/***/.vscode-server-insiders/.c089daa858f34631f5f827ff8a0313bf1e2ded6d.log: No such file or directory
> 
"install" terminal command done
Received install output: cat: /home/***/.vscode-server-insiders/.c089daa858f34631f5f827ff8a0313bf1e2ded6d.log: No such file or directory
Failed to parse remote port from server output: cat: /home/shawnguo/.vscode-server-insiders/.c089daa858f34631f5f827ff8a0313bf1e2ded6d.log: No such file or directory

最大的问题是我无法在主机上杀死VSCode的进程,因为当旧进程被杀死时,它们总是会产生一个新的进程。

@Melebius 终止进程是通用的操作系统功能,而不是针对编程的特殊功能。 - Mark Rotteveel
@MarkRotteveel 是的,但VS Code Server仍然有些特殊:它是一组进程,并且客户端提供了一种集成的方法来终止服务器。 - Melebius
5个回答

107
尝试通过按下ctrl + shift + p并输入命令来关闭vs code-remote主机。
Remote-SSH: kill VS Code Server on Host...

然后选择您的主机


如果远程 VS Code 出现新的以前从未存在过的问题,例如多次输入 SSH 密码但无法成功,那么在按照上述方法终止进程后,请删除远程主机的主目录中的 .vscode 文件夹。 - Sorush

23

对我来说,只需结束名为“node”的进程即可:

 killall node

当然,这不是一个完美的解决方案,只是一个权宜之计。


8
如果你杀掉所有的Node进程,可能会影响到其他正在运行的Node应用程序。 - aguedob
53
ps uxa | grep .vscode-server | awk '{print $2}' | xargs kill -9这段命令的意思是:通过使用 ps 命令列出所有进程,然后使用 grep 命令查找包含 ".vscode-server" 的进程,再使用 awk 命令打印该进程的第二个参数,最后将进程 ID 传递给 kill 命令并强制杀死这些进程。 - inselberg
@inselberg,你帮我省去了打字的麻烦,谢谢!;) - Manuel Jesus Rodriguez
1
@inselberg是一个救星。这个https://github.com/microsoft/vscode-remote-release/issues/5813与“Remote-SSH: kill VS Code Server on Host…”有关,似乎并不总是有效。 - Bob Ortiz
1
@Melebius,我不行,它已经关闭了...但是请随意重新打开并发布我的内容 ;) - inselberg
1
@inselberg 非常感谢您的提醒。这个问题已经通过重新开放投票,所以您现在可以发布您的回答了。 - Melebius

8

ps uxa | grep .vscode-server | awk '{print $2}' | xargs kill -9

这是一个与编程有关的命令,它可以帮助您结束在 VS Code 中运行的远程服务器进程。请注意,使用此命令将导致您失去未保存的更改,请确保在运行命令之前先保存所有更改。

太棒了!这正是我需要做的,以便用户组的更改生效。 - undefined
使用kill -9是一个糟糕的反应,只应作为最后的手段使用。由于信号设计上无法被捕获,进程无法执行任何清理活动。根据进程的不同,这可能会导致系统处于不健康的状态;文件可能在没有刷新缓冲区的情况下被关闭,分离的子进程可能会变成孤儿进程,等等。良好编写的进程应该对SIGTERM做出适当的响应。如果必要,可以使用SIGKILL - 但是在尝试其他方法之后再使用。 - undefined
很遗憾你把这个评论变成了一个回答,而这个评论已经有50多个赞,而这个回答只有不到10个赞。我点赞是为了让更多人看到,这对我来说起到了作用。谢谢! - undefined

2

pkill -9 vscode-server 对我有效。


1
在他们的github页面上提交了一个问题后,我参考了上面的一些帮助,并编写了这个脚本,用于每天早上4点作为cron任务运行。因为我不想再回到只使用vim的方式来处理所有事情。
#!/usr/bin/perl
use strict;

my $kill_at_hours = 4;
my @kill_pids = ();
my $ps_path = "./vspx.log";
my $look_for_cmd = "ps -eo pid,etime,comm | egrep 'code-[a-f0-9]{10}|node' > $ps_path";
my $sys = system($look_for_cmd);

open my $ps_file, "<", $ps_path;
while (<$ps_file>) {
    if ($_ =~ m/^\s*(\d+)\s+(.*?)\s+/) {
        my ($pid, $elapsed) = ($1, $2);
        my ($d, $h) = (0, 0);
        if ($elapsed =~ m/^(?:(\d{1,2}):)?\d{1,2}:\d\d/) {
            $h = $1;
        } elsif ($elapsed =~ m/^(\d{1,2})-(\d{1,2}):\d\d:\d\d$/) {
            ($d, $h) = ($1, $2);
        }
        my $total_hours = ($d * 24) + $h;
        if ($total_hours > $kill_at_hours) {
            my $process = `ps --no-headers $pid`;
            chomp $process;
            if ($process =~ m#
                    \.vscode-server/cli/servers/Stable-[a-f0-9]{40}/server/node |
                    \.vscode-server/code-[a-f0-9]{40}
                 #x) {
                push @kill_pids, $pid;
            }
        }
    }
}
close $ps_file;

for my $pid (@kill_pids) {
    my $kill_cmd = "kill $pid";
    my $sys = system($kill_cmd);
}

1
你能在这里提供问题的链接吗? - undefined
1
是的,很抱歉刚刚才看到这个。问题已在此处发布:https://github.com/microsoft/vscode-remote-release/issues/9147 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接