![Slackware 上的“ps”工作异常,为什么它会多次显示该过程?](https://linux22.com/image/495411/Slackware%20%E4%B8%8A%E7%9A%84%E2%80%9Cps%E2%80%9D%E5%B7%A5%E4%BD%9C%E5%BC%82%E5%B8%B8%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AE%83%E4%BC%9A%E5%A4%9A%E6%AC%A1%E6%98%BE%E7%A4%BA%E8%AF%A5%E8%BF%87%E7%A8%8B%EF%BC%9F.png)
我们有一个应用程序部署在Windows和Linux等不同平台上。它由三个Java进程组成。
在Linux上,当我们想要进程id杀死并重新启动其中一个时,我们这样做:
ps -ef | grep java
结果是三条线,代表三个过程。
我们的一个客户使用 Slackware,当我们执行相同的命令时,结果会是三个进程的几行、几十行。更糟糕的是,其中许多行仅显示:
root 3470 0.0 3.1 1468048 64944 ? S 07:33 0:00 java
这是错误的信息,因为我们无法确定这是三个模块中的哪一个。
有关于 slackware 和 ps 命令的一些信息吗?
更多信息:
Slackware 版本:10.2.0
内核版本:
Linux version 2.4.32-abi (root@servidor) (gcc version 3.3.6) #3 Mon Sep 29 10:27:28 GMT 2008
‘man ps’ 最后说道:
STANDARDS
This ps conforms to:
1 Version 2 of the Single Unix Specification
2 The Open Group Technical Standard Base Specifications, Issue 6
3 IEEE Std 1003.1, 2004 Edition
4 X/Open System Interfaces Extension [UP XSI]
5 ISO/IEC 9945:2003
提前致谢。
答案1
您可能会发现 slackware 上的 ps 向您显示每个进程的单独线程。Linux 中的线程基本上是使用 clone() 而不是 fork() 创建的单独进程,这使它们具有相同的地址空间。在 2.6 内核上,ps 通常可以检测哪些进程是线程,哪些不是。也许 slackware 的 ps 版本的行为略有不同。
你可能会发现使用
ps auxw | grep java
答案2
听起来你看到了线程,他使用的是哪个版本的“ps”?请他查看手册页,找到一种显示不带线程的进程的方法。