У нас есть приложение, развернутое на разных платформах, Windows и Linux. Он состоит из трех Java-процессов.
В Linux, когда мы хотим, чтобы идентификатор процесса уничтожил и перезапустил один из них, мы делаем:
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
Заранее большое спасибо.
Вы, вероятно, обнаружите, что ps в Slackware показывает отдельные потоки для каждого процесса. В Linux потоки - это в основном отдельные процессы, созданные с помощью clone (), а не fork (), что оставляет им одно и то же адресное пространство. В ядре 2.6 ps обычно определяет, какие процессы являются потоками, а какие нет. Возможно, у Slackware несколько иное поведение для своей версии ps.
Вы можете найти лучшую / другую удачу, используя
ps auxw | grep java
Похоже, вы видите темы, какую версию «ps» он использует? Попросите его проверить страницу руководства, чтобы узнать, как показать процессы без их потоков.