Расширить вывод ps до более чем 80 символов в Solaris 8

Как расширить вывод ps -fe в Solaris, чтобы он отображал более 80 символов? У моего процесса есть несколько аргументов, и имя процесса больше не может быть отображено.

6 ответов

Решение

Вы не можете отобразить их с помощью ps по умолчанию (/usr/bin/ps), который является обычным SVR4.

Чтобы получить полную строку аргумента, используйте BSD PS (UCB = Университет Калифорнии в Беркли):

/usr/ucb/ps -alxwww

Мы наконец исправили это в Solaris; начиная с Solaris 11.3 SRU 5 все исходные векторы аргументов, а также переменные среды могут быть получены из /proc. ps теперь напечатает всю командную строку.

Исправлено в Solaris 11.3 SRU 5

Простой ответ заключается в том, что невозможно надежно получить полные аргументы процессов в Solaris для процессов, принадлежащих другим пользователям. Если у вас есть root или другой привилегированный доступ, вы можете использовать / usr / ucb / ps в более старых версиях и "pargs" или аналогичные инструменты в более новых версиях (нет инструмента, который работает во всех версиях).

По сути, Solaris хранит исходные аргументы во время запуска процесса, в то время как большинство других платформ позволяют ps получить доступ, с помощью некоторых средств, к содержимому argv во время выполнения процесса. Эта сохраненная копия находится в специальной структуре данных ядра с ограниченным (80 байт) размером. Это также означает, что для программы не возможно изменить аргументы args после запуска, как показано ps для полезных или гнусных средств.

Таким образом, если вам нужен доступ к командной строке для переносимых целей, таких как проверка pid, вам нужно будет выбрать между принудительным введением короткой командной строки с помощью хаков, таких как запуск программных путей execp, управляемых без абсолютных путей, или вам придется отказаться от этого переносимого функциональность на солярисе.

Вы можете использовать pargs PID, он даст вам больше информации, чем PS

Пытаться ps -efl, Если это не сработает (у меня нет под рукой соляриса), вы также можете попробовать ps -efl | cat (поскольку некоторые программы проверяют, выводят ли они на терминал, чтобы определить их ширину вывода).

Для PS доступны два набора опций. Другие будут связываться с правильными именами ( (может быть, BSD и SRVn)?)

С не-опциями, предшествующими с-дефисом, вы можете сделать

ps auxww(w?) | grep ${PID} увеличить длину печатаемой детали команды (опять же, обратите внимание на НИКАКОЙ лидирующий индикатор опции '-').

Обратите внимание, что в некоторых случаях перед фактической командой вы увидите множество назначений переменных среды, т.е. myPath =... cfgFile =... / path / to / command... args...

Я думаю, что "www" в некоторых системах будет печатать все, независимо от длины команды.

Наконец, по моему опыту, используя ps для выполнения многих сумасшедших вещей, я иногда имел бы PID, и результат отображал бы первые 6? столбцы, но пространство, зарезервированное для команды, было пустым или имело какое-то значение заполнителя. В конце концов я выяснил, почему это так, по поиску comp.unix.shell, но это слишком давно, чтобы быть уверенным, и у меня нет сейчас доступа к системам Solaris.

Надеюсь, это поможет.

Другие вопросы по тегам