Bagaimana saya bisa mendapatkan seluruh pohon proses menelurkan oleh proses yang diberikan ditampilkan sebagai pohon dan hanya pohon itu yaitu tidak ada proses lain?
Outputnya misalnya bisa seperti
4378 ? Ss 0:10 SCREEN
4897 pts/16 Ss 0:00 \_ -/bin/bash
25667 pts/16 S+ 0:00 | \_ git diff
25669 pts/16 S+ 0:00 | \_ less -FRSX
11118 pts/32 Ss+ 0:00 \_ -/bin/bash
11123 pts/32 S+ 0:00 \_ vi
Saya tidak bisa mendapatkan hasil yang diinginkan murni dengan parameter ps
.
Berikut ini memberikan hasil yang diinginkan tetapi tampaknya sedikit terlibat:
#!/bin/bash
pidtree() {
echo -n $1 " "
for _child in $(ps -o pid --no-headers --ppid $1); do
echo -n $_child `pidtree $_child` " "
done
}
ps f `pidtree 4378`
Adakah yang punya solusi yang lebih mudah?
ps auxf
.Jawaban:
Ini
pstree
adalah solusi yang sangat bagus, tetapi agak pendiam. Saya menggunakanps --forest
sebagai gantinya. Tetapi tidak untuk aPID
(-p
) karena hanya mencetak proses spesifik, tetapi untuk sesi (-g
). Ia dapat mencetak informasi apa pun yangps
dapat dicetak dalam pohon seni ASCII yang mewah yang menentukan-o
opsi.Jadi saran saya untuk masalah ini:
Jika prosesnya bukan pemimpin sesi, maka sedikit trik yang harus diterapkan:
Ini mendapatkan id sesi (SID) dari proses saat ini terlebih dahulu dan kemudian memanggil ps lagi dengan sisi itu.
Jika tajuk kolom tidak diperlukan, tambahkan '=' setelah setiap definisi kolom dalam opsi '-o', seperti:
Contoh dijalankan dan hasilnya:
Sayangnya ini tidak berfungsi karena
screen
mengatur sid untuk setiap layar anak dan semua cucu bash.Untuk mendapatkan semua proses yang dihasilkan oleh suatu proses, seluruh pohon perlu dibangun. Saya menggunakan awk untuk itu. Pada awalnya ia membangun array hash untuk mengandung semua
PID => ,child,child...
. Pada akhirnya ia memanggil fungsi rekursif untuk mengekstrak semua proses anak dari proses yang diberikan. Hasilnya diteruskan ke yang lainps
untuk memformat hasilnya. PID yang sebenarnya harus ditulis sebagai argumen untuk awk alih-alih<PID>
:Untuk proses SCREEN (pid = 8041) contoh output terlihat seperti ini:
sumber
ps
memiliki opsi bendera filter hanya untuk menyaring semua keturunan PID.dimana
${pid}
pid dari proses induk.Di Gentoo Linux,
pstree
ada dalam paket "psmisc," tampaknya terletak dihttp://psmisc.sourceforge.net/sumber
pstree
, tetapi melewatkan format output yang lebih verbose. Namun,pstree -p <pid>
setidaknya cetak pids yang cukup dekat.sed
semua itu .. mmm ini bekerja :)pstree -pn 4008 |grep -o "([[:digit:]]*)" |grep -o "[[:digit:]]*"
Berikut ini adalah versi saya yang berjalan secara instan (karena
ps
dieksekusi hanya sekali). Bekerja di bash dan zsh.sumber
echo $1
di dalam pertama untuk loop dan mengubahnya keecho $i
.Saya telah membuat skrip bash kecil untuk membuat daftar pid tentang proses anak orang tua. Secara rekursif sampai menemukan proses anak terakhir yang tidak memiliki anak. Itu tidak memberi Anda tampilan pohon. Itu hanya daftar semua pid.
Argumen pertama dari list_offspring adalah parent parent
sumber
ps -H -g "$pid" -o comm
tidak menambahkan pohon per se, itu hanya daftar proses.
memberi misalnya
sumber
-H
opsi digunakan untuk menampilkan pohon proses atau "hirarki proses (hutan)"Saya telah bekerja untuk menemukan solusi untuk masalah yang sama persis. Pada dasarnya, ps manpage tidak mendokumentasikan opsi apa pun yang memungkinkan untuk melakukan apa yang kita inginkan dengan satu perintah. Kesimpulan: naskah dibutuhkan.
Saya datang dengan skrip yang sangat mirip dengan Anda. Saya menempelkannya di ~ / .bashrc saya jadi saya bisa menggunakannya dari shell apa saja.
sumber
Dalam perjalanan di command-line:
itu output:
cara yang lebih elegan dari cara itu adalah mendefinisikan suatu fungsi di
.bashrc
:kemudian pada menjalankan baris perintah:
sumber
Ini hanya memberikan pid + anak-anak masing-masing pada satu baris yang berguna untuk diproses lebih lanjut.
sumber
Saya membuat skrip serupa berdasarkan Philippe di atas
Ini akan menampilkan semua anak, cucu, dll. Dalam format terbatas-ruang. Pada gilirannya, ini dapat diumpankan ke ps, seperti pada
sumber
untuk semua proses - pstree -sebuah pertunjukan oleh pengguna - pengguna pstree
sumber