3

Я заметил, что команда ps -a выдает другой вывод, когда я запускаю ее на Ubuntu "16.04" и Fedora 23. Согласно справочной странице обоих дистрибутивов опция -a должна делать:

-a Выбрать все процессы, кроме обоих лидеров сеансов (см. getsid (2)) и процессов, не связанных с терминалом.

Это не похоже на случай с Ubuntu.

Я не могу объяснить это поведение, так как кажется, что они имеют одинаковую версию procps.

Fedora:

  • Название: procps-ng
  • версия: 3.3.10

Ubuntu:

  • Пакет: procps
  • Версия: 2: 3.3.10-4ubuntu2

Ты хоть представляешь, почему это происходит? Я делаю что-то неправильно ?

Спасибо, БР,

2 ответа2

2

Есть, по крайней мере, две вещи, которые могут быть. , Скорее всего , в том , что ps псевдоним ps -A (или ps a а - без - приводит к поведению , подобных -A) на Fedora; который бы объяснил формат вывода. В каждом системном типе which ps который покажет, какие псевдонимы, если таковые имеются, вызываются вместо исполняемого файла напрямую.

Вы можете обойти любые псевдонимы, либо вызвав полный путь к программе (например, /bin/ps либо запустив команду с начальным '\', например, \ps .

Гораздо менее вероятно, что два дистрибутива скомпилировали ps с разными флагами (что привело к разному поведению). Я только что проверил ps на fedora 23, и его вывод по умолчанию такой же, как и у ubunutu, так что я думаю, что у вас есть набор псевдонимов.

Псевдоним, скорее всего, установлен в файле ~/.bashrc; хотя возможны и другие локации. Вы можете увидеть псевдонимы в вашей текущей среде, набрав alias без аргументов в терминале.

Обновить:

Поскольку они не имеют псевдонимов, что-то еще (чтобы заявить очевидное) модифицирует поведение. Вот несколько вещей, на которые стоит обратить внимание, чтобы узнать, что это такое: На каждой системе запускайте их в «чистой» среде:

env -i ps

и посмотрим, изменится ли поведение. Если это так, то мы знаем, что это изменение окружающей среды.

в каждой системе введите следующую команду:ps --info

Посмотрите, не является ли поле personality=0x ненулевым, что может изменить вывод. Обратите внимание на любые другие отличия от этого вывода; опубликуйте их, если не можете расшифровать значение разницы.

Чтобы увидеть, что-то меняет ps , запустите следующее в оболочке bash для каждого:

set -x
ps -a

Вы должны увидеть что-то вроде:

+ps -a

эхом отозвался; если вы видите что-то еще, например, +ps aux , то это может вызвать это. Обычно это делается псевдонимом, но это может быть функция. Вы можете отключить спам в bash, запустив set +x

На каждой машине проверяйте, является ли двоичный файл символической ссылкой на что-то еще, и происходит ли там что-то странное (вероятно, в fedora /usr /bin /ps является символической ссылкой на /bin /ps)

ls -alt /bin/ps
ls -alt /usr/bin/ps

Пытаться

type ps

На каждой машине; результаты должны быть одинаковыми, если не отвечать с результатами.

Существуют некоторые переменные среды, которые могут изменить поведение ps; чтобы увидеть этих типа man ps ; они внизу. введите env на каждой ОС и посмотрите, установлены ли они; вы можете grep для них:

env | grep 'CMD_ENV\|PS_PERSONALITY\|_XPG'

Есть другие; см. справочную страницу, чтобы добавить их в запрос, если они ничего не возвращают, или выяснить, что означает этот параметр для ps .

Попадание в сорняки здесь, но если у вас все еще ничего нет, проверьте заголовки двоичных файлов на каждом:

readelf -h /bin/ps

Если ничего из этого не показывает каких-либо различий, вы можете скопировать файл /bin /ps в другую ОС и выполнить сравнение:

cmp -b /bin/ps /path/to/copy/of/ps

Это выведет все байты, которые отличаются между двумя файлами. Фактические значения не имеют значения; просто количество отличий.

Они будут другими; если разница составляет всего пару байтов, то это будет просто поле gcc NT_GNU_BUILD_ID, которое является уникальным для каждой сборки, даже в других случаях идентичных файлов. Если они существенно не отличаются от поведения, связанного с окружающей средой, и я не могу больше думать об этом.

0

ps man page

-a Выбрать все процессы, кроме обоих лидеров сеансов (см. getsid (2)) и процессов, не связанных с терминалом.

Такое поведение объясняется тем, что к терминалу в Fedora подключено больше процессов, чем в Ubuntu.

  1. Ubuntu
  2. мягкая фетровая шляпа

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .