“ps”命令不返回提示符

“ps”命令不返回提示符

我有一个 busybox/linux 盒子,需要定期维护。为此,我ps以编程方式发出命令并检查正在运行的进程。

但如屏幕截图所示,有时,该ps命令不会终止并返回到提示符,它只是停留在那里,因此我的应用程序无法继续。

同样明显的是,以前的ps命令仍在运行,而当前命令(即屏幕截图中显示的输出)也被挂起。

有谁知道可能是什么问题以及如何解决它?

ps 命令挂起

答案1

D第四列中的 表示该进程当前正在进行系统调用。这种系统状态通常持续很短的时间,因此很难观察到它。观察D往往表明 I/O 速度较慢(例如在网络文件系统上)(ps未执行),或者内核或硬件出现问题。

要么您发现了内核错误,要么您的硬件的某些部分出现了故障。要了解更多信息,第一步是查找日志文件。您的系统正在运行忙碌盒并且您的屏幕截图显示它正在syslogd无参数运行,因此所有系统日志都在/var/log/messages.该文件很可能包含一些出现问题的指示。如果您需要帮助解释日志,请将它们编辑到您的问题中(如果它们太大,则将它们放在网上的某个地方)。

答案2

我有几个建议。我们不要担心它发生的原因,而是担心如何运行 ps 而不会出现问题。

鉴于您的 Linux/Unix 经验水平,以下是一些很容易尝试的建议:

  1. 尝试跑步ps auxwwf > myprocesses && cat myprocesses。这将为您提供所有正在运行的进程的列表以及详细信息,如果第一个命令成功,您将能够读取 myprocesses 的内容。

  2. 不要ps单独使用。有很多不同的变体,但我个人最喜欢的是auxwwf。另一个好的是ps lax

  3. 尝试通过执行以下操作将进程发送到后台:ps auxwwf & 然后您可以键入jobs并查看 ps 进程的 PID。然后您可以通过键入 来调出它fg。要再次将 ps 命令发送到后台,您可以按Ctrlz。这样,你就可以掌控ps。如果它挂起,您可以打开另一个终端会话并终止与其关联的 PID。

让我知道这些是否适合您。它们只是您可以尝试解决的一些问题。我确信有人会有其他方法。

答案3

今天也看到了同样的问题。问题是无延迟。识别通过命令。

64 bytes from 172.16.60.143: icmp_seq=1 ttl=64 time=300 ms
64 bytes from 172.16.60.143: icmp_seq=2 ttl=64 time=293 ms
64 bytes from 172.16.60.143: icmp_seq=3 ttl=64 time=258 ms
64 bytes from 172.16.60.143: icmp_seq=4 ttl=64 time=268 ms
64 bytes from 172.16.60.143: icmp_seq=5 ttl=64 time=250 ms
64 bytes from 172.16.60.143: icmp_seq=6 ttl=64 time=282 ms
64 bytes from 172.16.60.143: icmp_seq=7 ttl=64 time=233 ms
64 bytes from 172.16.60.143: icmp_seq=8 ttl=64 time=259 ms
64 bytes from 172.16.60.143: icmp_seq=9 ttl=64 time=288 ms
64 bytes from 172.16.60.143: icmp_seq=10 ttl=64 time=240 ms

注意:如果您通过 VPN 连接服务器。尝试登录不同的ISP解决这个问题。

相关内容