Чи можу я використовувати GNU ps на OS X?


18

Ми можемо встановити GNU coreutils через brew. Але там немає psв утиліти . Чи можемо ми використовувати gnu psв OS X?

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


ви намагалися запустити psабо ps -efв терміналі на OSX? працює для мене на OSX 10.7.5 без змін, на двох різних машинах. It in / bin / ps
jammypeach

Так, я знаю, я хотів використовувати GNU, psоскільки він має більше можливостей та можливостей.
Sanghyun Lee

ага гаразд, вибачте, що я не зрозумів цього із запитання. Я б запропонував включити це десь, якщо, будь-хто, думає так само, як і я - удача з пошуком рішення
jammypeach

Дякую за пропозицію. Я додав ще пояснення з цього приводу.
Sanghyun Lee

Відповіді:


22

Немає портативної програми ps. Команда ps, доступна в Linux, як уже згадувались, є з пакету "propps". Причина, по якій це неможливо перенести в OSX, полягає в тому, що ядра Linux і OSX не розкривають цю інформацію однаково. Linux використовує псевдофайлову систему в / proc, тоді як OSX використовує функцію sysctl. Інші системи можуть використовувати будь-який механізм, але надають дані в іншому форматі, або можуть вимагати такі програми, як ps, для читання безпосередньо з пам'яті ядра.

Взагалі немає стандартів щодо того, як інформація про процес доступна для таких програм, як ps та top; тому програма повинна бути розроблена для конкретної операційної системи. Якщо в OSX PS відсутня певна функція, вам доведеться знайти іншу програму, яка може це зробити, або написати її самостійно (подивіться посібник з sysctl, зокрема KERN_PROC як вихідний пункт), або модифікуйте існуючий ps команда для додавання функції.

Крім того, якщо ви можете отримати те, що вам потрібно, проаналізувавши висновок самої команди ps, ви, можливо, зможете написати портативну програму - вихід з цією -oопцією є досить надійним для всіх платформ, особливо якщо ви посилаєтесь на стандарт UNIX для назви стовпців для використання.


Чи є /procфайлова система єдиним методом, який забезпечує ядро ​​Linux для отримання списку процесів, чи є також окремі системні виклики, які надають цю інформацію?
Таннер Світт

1
@TannerSwett Я так не думаю. До того, як / proc було впроваджено, команда ps на linux працювала, читаючи з / dev / kmem та / dev / swap.
Випадково832

9

Ні - оскільки його не існує. Про те, чому немає вбудованого пакету psGNU coreutils, дивіться цю відповідь на форумах Unix & Linux.

Найкраща альтернативна формула, доступна через Homebrew psgrep:

psgrep - це невеликий скрипт оболонки Bash, який здійснює пошук у списку процесів (як отримано ps (1) ), використовуючи дивовижну програму grep (1) для своєї потужності.

Однак, ви все ще psgrepможете вести себе так, як psхотів би OS X. Наприклад:

   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, використання пам'яті / процесора, приємність та будь-що інше, що підтримується по пс.


Всі акценти мої.


2
pgrepтакож є частиною останніх версій ОС X
nohillside

@patrix agh! хороший момент, підтверджено: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, здається, є з propps , але, схоже, немає формули для цього на домашній мові. Існують формули, за допомогою pstreeяких можна отримати прекрасний вид на дерево, а також htopє ще одним хорошим переглядачем процесів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.