Могу ли я использовать GNU PS на OS X?

18

Мы можем установить GNU coreutils через brew. Но нет psв утиле . Можем ли мы использовать GNU psв OS X?

Я хотел бы использовать GNU, так psкак он имеет больше опций и возможностей.

Санхьюн Ли
источник
Вы пробовали запустить psили ps -efв терминале на OSX? у меня работает на OSX 10.7.5 без изменений, на двух разных машинах. Это в / bin / ps
jammypeach
Да, я знаю, я хотел использовать GNU, psпотому что он имеет больше опций и возможностей.
Санхьюн Ли
ах хорошо, извините, я не понял этого из вопроса, как указано. Я бы предложил включить это где-нибудь, если кто-то еще думает так же, как я - удачи в поиске решения
jammypeach
Спасибо за предложение. Я добавил больше объяснений по этому поводу.
Санхьюн Ли

Ответы:

22

Портативной программы для PS не существует. Команда ps, доступная в linux, как уже упоминалось, из пакета "procps". Причина, по которой это нельзя перенести на OSX, состоит в том, что ядра Linux и OSX не предоставляют эту информацию одинаково. Linux использует псевдофайловую систему в / proc, тогда как OSX использует функцию sysctl. Другие системы могут использовать любой механизм, но предоставлять данные в другом формате, или могут потребовать, чтобы такие программы, как ps, читали непосредственно из памяти ядра.

В общем, нет никакого стандарта для того, как информация о процессе доступна для таких программ, как ps и top; поэтому программа должна быть разработана для конкретной операционной системы. Если в OSX ps отсутствует определенная функция, вам нужно будет найти другую программу, которая может это сделать, или написать ее самостоятельно (см. Руководство по sysctl, в частности KERN_PROC в качестве отправной точки) или изменить существующие ps. Команда, чтобы добавить функцию.

С другой стороны, если вы можете получить то, что вам нужно, анализируя выходные данные самой команды ps, вы можете написать переносимую программу - выходные данные с этой -oопцией достаточно надежны для всех платформ, особенно если вы ссылаетесь на стандарт UNIX для имена столбцов для использования.

Random832
источник
Является ли /procфайловая система единственным методом, который ядро ​​Linux предоставляет для получения списка процессов, или существуют также отдельные системные вызовы, которые предоставляют эту информацию?
Таннер Светт
1
@TannerSwett Я так не думаю. До внедрения / proc команда ps в linux работала путем чтения из / dev / kmem и / dev / swap.
Random832
9

Нет - поскольку его не существует. Относительно того, почему нет встроенного psв coreutilsпакет GNU , смотрите этот ответ на форумах Unix & Linux.

Лучшая альтернативная формула, доступная через Homebrew psgrep:

psgrep - это небольшой скрипт оболочки Bash, который выполняет поиск в списке процессов (полученном с помощью ps (1) ), используя его мощную утилиту grep (1) .

Тем не менее, вы можете использовать , psgrepчтобы вести себя как OS иксы psбудет. Например:

   OPTIONS
   -a     Search the process list using BSD's "ps aux" format. This option
          includes all users' processes in the search.

   -b     Search the process list using BSD's "ps  ux"  format  (default).
          This option only includes the running user's processes.

pgrepтакже доступен через brew, что синтаксически ближе ps, но менее эффективно, чем psgrep:

psgrep (1) более полезен, чем pgrep (1), потому что он не только может искать в списке процессов и возвращать PID, он может давать более полезную информацию, такую ​​как его UID, GID, использование памяти / ЦП, точность и все остальное, что поддерживается по пс.


Весь акцент мой.

njboot
источник
2
pgrepтакже является частью последних версий OS X
nohillside
@patrix ах! Хороший вопрос, подтвердил:type -a pgrep pgrep is /usr/local/bin/pgrep pgrep is /usr/bin/pgrep
njboot
Так же , как и в сторону, как уже упоминалось здесь , в proctoolsпакет либо из MacPorts или Homebrew обеспечивает pgrepи pkillчто то , что я лично искал, когда я появился здесь.
TheDudeAbides
3

psне является частью ядра GNU Coreutils согласно Википедии . Версия, которая поставляется с моим дистрибутивом Linux, похоже, от procps , но, похоже, в homebrew нет формулы для этого. Существуют формулы, для pstreeкоторых можно получить отличные представления дерева, а также htopеще один хороший просмотрщик процессов.

Томас
источник