Bisakah saya menggunakan GNU ps pada OS X?

18

Kami dapat menginstal GNU coreutils via brew. Tapi tidak ada psdalam utils . Bisakah kita menggunakan gnu psdi OS X?

Saya ingin menggunakan GNU pskarena memiliki lebih banyak opsi dan fitur.

Sanghyun Lee
sumber
Sudahkah Anda mencoba menjalankan psatau ps -efdi terminal pada OSX? bekerja untuk saya di OSX 10.7.5 tanpa modifikasi, pada dua mesin yang berbeda. Ada di / bin / ps
jammypeach
Yup, saya tahu, saya ingin menggunakan GNU pskarena memiliki lebih banyak opsi dan fitur.
Sanghyun Lee
ah oke, maaf saya tidak menyadarinya dari pertanyaan seperti yang dinyatakan. Saya sarankan memasukkannya di suatu tempat, memetikan orang lain berpikiran sama dengan saya - semoga sukses dengan menemukan solusi
jammypeach
Terima kasih atas sarannya. Saya menambahkan lebih banyak penjelasan tentang itu.
Sanghyun Lee

Jawaban:

22

Tidak ada program ps portabel. Perintah ps yang tersedia di linux, seperti yang disebutkan orang lain, dari paket "procps". Alasan mengapa ini tidak dapat porting ke OSX adalah karena kernel Linux dan OSX tidak mengekspos informasi ini dengan cara yang sama. Linux menggunakan sistem file pseudo di / proc, sedangkan OSX menggunakan fungsi sysctl. Sistem lain dapat menggunakan salah satu mekanisme tetapi menyediakan data dalam format yang berbeda, atau mungkin memerlukan program seperti ps untuk membaca langsung dari memori kernel.

Secara umum tidak ada standar untuk bagaimana informasi proses tersedia untuk program-program seperti ps dan atas; sehingga program harus dirancang untuk sistem operasi tertentu. Jika ada fitur tertentu yang hilang dari OSX ps, Anda harus menemukan program lain yang dapat melakukannya, atau menulis sendiri (lihat manual sysctl, khususnya KERN_PROC sebagai titik awal), atau ubah ps yang ada perintah untuk menambahkan fitur.

Sebagai alternatif, jika Anda bisa mendapatkan apa yang Anda butuhkan dengan mem-parsing output dari perintah ps itu sendiri, Anda mungkin dapat menulis program portabel - output dengan -oopsi ini cukup dapat diandalkan di seluruh platform, terutama jika Anda merujuk pada standar UNIX untuk nama kolom yang akan digunakan.

Random832
sumber
Apakah sistem /procfile satu-satunya metode yang disediakan kernel Linux untuk mendapatkan daftar proses, atau apakah ada juga pemanggilan sistem terpisah yang menyediakan informasi itu?
Tanner Swett
1
@ TannerSwett saya tidak berpikir begitu. Sebelum / proc diimplementasikan, perintah ps di linux bekerja dengan membaca dari / dev / kmem dan / dev / swap.
Random832
9

Tidak - karena tidak ada. Mengenai mengapa tidak ada builtin psdalam coreutilspaket GNU , lihat jawaban ini di Forum Unix & Linux.

Formula alternatif terbaik yang tersedia melalui Homebrew adalah psgrep:

psgrep adalah skrip Bash shell kecil yang mencari daftar proses (seperti yang diperoleh oleh ps (1) ) menggunakan grep utilitas mengagumkan (1) untuk kekuatannya.

Yang mengatakan, Anda masih dapat menggunakan psgrepuntuk berperilaku sebagai OS X psakan. Sebagai contoh:

   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.

pgrepjuga tersedia melalui brew, yang secara sintaksis lebih dekat dengan ps, tetapi kurang efisien daripada psgrep:

psgrep (1) lebih berguna daripada pgrep (1) karena tidak hanya dapat mencari daftar proses dan mengembalikan PID, ia dapat memberikan informasi yang lebih berguna seperti UID, GID, penggunaan memori / CPU, kesenangan, dan hal lain yang didukung oleh ps.


Semua menekankan milikku.

njboot
sumber
2
pgrepjuga merupakan bagian dari versi terbaru OS X
nohillside
@ patrix agh! poin bagus, dikonfirmasi:type -a pgrep pgrep is /usr/local/bin/pgrep pgrep is /usr/bin/pgrep
njboot
Selain itu, seperti yang disebutkan di sini , proctoolspaket dari MacPorts atau Homebrew menyediakan pgrepdan pkillapa yang secara pribadi saya cari ketika saya muncul di sini.
TheDudeAbides
3

psbukan bagian dari GNU coreutils menurut Wikpedia . Versi yang datang dengan distribusi Linux saya tampaknya berasal dari procps , tetapi sepertinya tidak ada rumus untuk itu di homebrew. Ada rumus pstreeyang dapat memberi Anda tampilan pohon yang bagus, dan juga htopmerupakan penampil proses yang baik.

Thomas
sumber