![“ps”命令不返回提示符](https://linux22.com/image/33143/%E2%80%9Cps%E2%80%9D%E5%91%BD%E4%BB%A4%E4%B8%8D%E8%BF%94%E5%9B%9E%E6%8F%90%E7%A4%BA%E7%AC%A6.png)
我有一个 busybox/linux 盒子,需要定期维护。为此,我ps
以编程方式发出命令并检查正在运行的进程。
但如屏幕截图所示,有时,该ps
命令不会终止并返回到提示符,它只是停留在那里,因此我的应用程序无法继续。
同样明显的是,以前的ps
命令仍在运行,而当前命令(即屏幕截图中显示的输出)也被挂起。
有谁知道可能是什么问题以及如何解决它?
答案1
D
第四列中的 表示该进程当前正在进行系统调用。这种系统状态通常持续很短的时间,因此很难观察到它。观察D
往往表明 I/O 速度较慢(例如在网络文件系统上)(ps
未执行),或者内核或硬件出现问题。
要么您发现了内核错误,要么您的硬件的某些部分出现了故障。要了解更多信息,第一步是查找日志文件。您的系统正在运行忙碌盒并且您的屏幕截图显示它正在syslogd
无参数运行,因此所有系统日志都在/var/log/messages
.该文件很可能包含一些出现问题的指示。如果您需要帮助解释日志,请将它们编辑到您的问题中(如果它们太大,则将它们放在网上的某个地方)。
答案2
我有几个建议。我们不要担心它发生的原因,而是担心如何运行 ps 而不会出现问题。
鉴于您的 Linux/Unix 经验水平,以下是一些很容易尝试的建议:
尝试跑步
ps auxwwf > myprocesses && cat myprocesses
。这将为您提供所有正在运行的进程的列表以及详细信息,如果第一个命令成功,您将能够读取 myprocesses 的内容。不要
ps
单独使用。有很多不同的变体,但我个人最喜欢的是auxwwf
。另一个好的是ps lax
。尝试通过执行以下操作将进程发送到后台:
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解决这个问题。