我使用 sshfs 挂载远程服务器上的目录和文件并与之交互。我正在使用的命令是:
sshfs -o follow_symlinks host:dir mountpoint -o reconnect
有时,在一段时间不活动后,当我将计算机从挂起模式唤醒时,使用远程服务器上资源的进程不再响应。 它主要发生在 Nautilus(文件)上,如果打开的 PDF 文件位于远程服务器上,则可能会发生在 Okular 上。
尝试杀死这些进程是kill -9
行不通的。例如,当 Nautilus 没有响应时,以下是我用来尝试终止进程的命令:
toto:~/.ssh$ ps aux | grep nautilus
toto 21435 0.4 0.3 1440760 123276 ? Sl 09:32 1:48 /usr/bin/nautilus --gapplication-service
toto 96139 0.0 0.0 9216 2428 pts/4 S+ 15:44 0:00 grep --color=auto nautilus
toto:~/.ssh$ kill -9 21435
我学过这里这是因为他们在不间断的睡眠。从其他讨论,我认为解决方案是用作-o reconnect
sshfs 的参数。不幸的是,我仍然遇到在计算机唤醒后没有响应的应用程序。
答案1
我会尝试使用ServerAliveInterval
和ServerAliveCountMax
/或ClientAliveInterval
ServerAliveInterval 似乎是保持连接活动并防止管道损坏问题的最常见策略。
sshd_config 中的optionsServerAliveInterval
和到底是做什么的?ClientAliveInterval
带壳:
sshfs -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o follow_symlinks host:dir mountpoint -o reconnect
客户端将空闲等待 60 秒(ServerAliveInterval 时间),并向服务器发送“无操作空数据包”并期待响应。如果没有响应,那么它将继续尝试上述过程,直到 3 (ServerAliveCountMax) 次(180 秒)。如果服务器仍然没有响应,则客户端断开 ssh 连接。
ClientAliveCountMax
ClientAliveCountMax
在服务器端也可能有帮助。这是允许客户端在断开连接之前保持无响应的时间限制。默认值为3,即3个ClientAliveInterval。
配置~/.ssh/config
Host myhostshortcut
HostName myhost.com
User barthelemy
ServerAliveInterval 60
ServerAliveCountMax 10
杀死父进程
杀死父进程,而不是尝试直接杀死无响应的进程。
ppid
查找无响应进程使用的父进程id
ps -ef
在这种情况下,无响应进程的父进程是由该sshfs
命令创建的进程。以下命令将有助于在正在运行的进程列表中找到它。
ps -ef | grep sshfs
如果您有ppid
,请使用kill
带有 的命令pid
。
kill -9 1268
杀死父进程也应该终止子进程。