Bagaimana saya bisa mendapatkan daftar proses lengkap dalam solaris, tanpa garis terpotong?

57

Apakah ada cara untuk menghasilkan daftar proses lengkap dalam solaris, tanpa garis terpotong? Saya sudah mencoba psperintah, dengan argumen berikut:

  -f Menghasilkan daftar lengkap. (Lihat di bawah untuk
                      pentingnya kolom dalam daftar lengkap-
                      ing.)
  -L Menghasilkan daftar panjang. (Lihat di bawah.)

Jadi, keduanya tampaknya melakukan apa yang saya inginkan, namun, lebih jauh ke bawah di halaman manual ps, saya menemukan ini:

 
 args Perintah dengan semua argumennya sebagai a
                         tali. Implementasi dapat terpotong
                         nilai ini ke lebar bidang; ini
                         tergantung pada implementasi apakah ada
                         pemotongan lebih lanjut terjadi. ini
                         tidak ditentukan apakah string
                         diwakili adalah versi argumen
                         daftar sebagaimana diteruskan ke perintah
                         ketika dimulai, atau merupakan versi
                         argumen karena mereka mungkin telah dimodifikasi
                         oleh aplikasi. Aplikasi tidak bisa
                         tergantung pada kemampuan untuk memodifikasi mereka
                         daftar argumen dan memiliki modifikasi itu-
                         tion tercermin dalam output ps.
                         Implementasi Solaris membatasi
                         string ke 80 byte; string adalah
                         versi daftar argumen seperti itu
                         diteruskan ke perintah ketika dimulai.

Yang pada dasarnya mengatakan output akan terpotong dan tidak ada yang bisa saya lakukan. Jadi, saya datang ke sini. Tentunya orang lain telah mengalami masalah ini dan bahkan mungkin memiliki jalan keluar. Saya kira ps tidak bisa melakukannya dan jadi saya perlu menggunakan alat lain untuk melakukan ini. Apakah itu akurat?

kawan
sumber
Apakah Anda berbicara tentang psperintah itu? Jika demikian maka silakan perbarui pertanyaan agar lebih jelas.
phunehehe
Ya, maaf ... bermain-main awal saya dengan perintah ps, saya sudah membuat pertanyaan lebih jelas.
gabe.

Jawaban:

63

kamu bisa mencoba

pargs <PID>

ini memberi Anda daftar semua argumen

atau gunakan ps lain. Jika dijalankan sebagai root (atau pengguna mana pun dengan cukup hak istimewa dalam hal ini)

/usr/ucb/ps auxww

akan memberi Anda semua argumen. Bagiannya dari SUNWscpu, "Kompatibilitas Sumber, (Usr)"

Marcel G
sumber
pargsmemperlihatkan salinan argumen baris perintah dalam proses (dan opsional lingkungan). Senang tahu, terima kasih!
Gilles 'SO- stop being evil'
1
direktori seluruh / usr / ucb ini baru bagi saya ... Saya menyukainya!
gabe.
3
Pada Solaris 11, jika Anda menggunakan opsi tanpa tanda hubung (seperti "/ usr / bin / ps auxwww") mereka akan diperlakukan sebagai opsi gaya UCB, dan output akan menampilkan garis panjang ekstra, bahkan ketika Anda TIDAK berjalan sebagai root. Ini tidak dipublikasikan dengan baik. Lihat juga: superuser.com/questions/148271/ps-command-in-solaris
Chris Quenelle
14

Kernel tidak diharuskan untuk melacak argumen baris perintah. Ketika sebuah program dimulai melalui execvepanggilan, kernel harus menyalin argumen ke dalam memori proses (sehingga mereka akan tersedia seperti argvdalam program C, misalnya). Setelah itu, kernel dapat membuang memori yang digunakan untuk menyimpan argumen baris perintah awal. Proses ini diizinkan untuk menimpa salinan argumennya. Jadi mungkin tidak ada jejak argumen.

Beberapa varian unix menyimpan salinan argumen dalam beberapa bentuk. Solaris memaparkan beberapa data di /proc/$pid. Pada OpenSolaris 2009.06, satu-satunya jejak argumen ada di /proc/$pid/psinfo, di mana mereka digabungkan dengan spasi di antaranya (jadi Anda tidak dapat membedakan antara foo "one" "two"dan foo "one two") dan string yang dihasilkan dipotong hingga 80 byte. Bidang ini /proc/$pid/psinfoadalah yang psdicetak di dalam argskolom.

Omong-omong, opsi -fdan -lmengontrol bidang apa yang dicetak, bukan apakah bidang tersebut dipotong dengan lebar tertentu.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Ini adalah jawaban yang bagus juga, sangat informatif. Perintah pargs memenuhi kebutuhan saya dengan lebih baik yang merupakan satu-satunya alasan saya memilih jawaban itu.
gabe.
6
Jadi, sekali lagi kita duduk di sini pada tahun 2013 dan masih memotong string hingga 80 byte karena kita hanya memiliki terminal 80-char pada tahun 1970-an dan "beberapa" program belum memahami kenyataan bahwa kehidupan telah berubah. Dan kami menyukainya, kami memuji ini sebagai "kompatibilitas"! Kita seharusnya malu pada diri kita sendiri ...
Manjabes
1
@ Manjabes haha! Orang-orang yang memilih untuk tetap menggunakan Solaris tidak boleh mengeluh tentang sistem melakukan hal-hal dengan cara lama-skool ;-) Solaris sengaja lambat untuk berubah, agar lebih kompatibel dengan program yang lebih tua yang mengharapkan perilaku tertentu. Jika Anda menginginkan OS dengan daftar ps yang lebih panjang dan kemampuan yang lebih mewah dalam program utilitas, Anda dapat menggunakan Linux sebagai gantinya.
JohnGH
2

ps -ememberikan daftar semua proses yang berjalan. Juga ada ini ps -elf.

ari
sumber
2
Bahkan menggunakan argumen -l masih memotong info baris perintah
Lars Nordin
1
Bukan jawaban untuk pertanyaan itu.
Konrad Gajewski
0

Tergantung pada psperintah yang Anda gunakan, saya menggunakan

ps -auxw
Wes
sumber
1
Versi ps pada Solaris yang menggunakan argumen auxw tidak memerlukan arahan '-' Jika Anda tidak menggunakan Solaris maka jawaban Anda tidak relevan.
JohnGH
0

prstat akan memberi Anda proses yang sedang berjalan bersama dengan pids mereka dan pemanfaatan CPU.

pengguna41052
sumber