当服务器没有响应时,进程处于不间断睡眠状态

当服务器没有响应时,进程处于不间断睡眠状态

我使用 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 reconnectsshfs 的参数。不幸的是,我仍然遇到在计算机唤醒后没有响应的应用程序。

答案1

我会尝试使用ServerAliveIntervalServerAliveCountMax/或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

杀死父进程也应该终止子进程。

相关内容