Bagaimana saya bisa mendapatkan output PS dengan header di tempat?
Dua proses ini membuat aplikasi yang berjalan di server saya ....
root 17123 16727 0 16:25 pts/6 00:00:00 grep GMC
root 32017 1 83 May03 ? 6-22:01:17 /scripts/GMC/PNetT-5.1-SP1/PNetTNetServer.bin -tempdir /usr/local/GMC/PNetT-5.1-SP1/tmpData -D
apakah itu 6-22:01:17
berarti sudah berjalan selama 6 hari? Saya tring untuk menentukan berapa lama proses telah berjalan ...
Apakah kolom ke-2 id proses? Jadi jika saya melakukannya kill 32017
akan mematikan proses ke-2?
ps -e
pilih semua proses, danps -f
daftar format lengkap yang menunjukkan tajuk kolom. Kemudian kita pipa header kolom dan output ke egrep, yang diperpanjang grep dan memungkinkan pipa|
untuk memiliki arti khusus, yaitu ATAU (ini ATAU itu). Jadi, Anda akhirnya mencocokkan PID dalam tajuk kolom plus garis output yang penting.ps -ef | grep -E 'GMC|PID'
Terima kasih kepada geekosaur, saya ingin menggunakan perintah ini untuk permintaan Anda, daripada perintah yang terpisah:
Kuncinya adalah memanfaatkan ";" didukung oleh shell untuk mem-chain perintah.
sumber
ps -ef
mengulanginya. lebih baik lagi adalahps -ef | { head -1 ; grep "your-pattern" ; }
ps -ef | { head -1; grep "pattern" | head -5; }
. Berguna jika pola grep-ed memiliki banyak hasil!Kolom kedua adalah id proses; Keempat adalah ketika proses dibuat (biasanya ini adalah waktu program Anda dimulai, tetapi tidak selalu; pertimbangkan
execve()
dan teman-teman); 6 adalah jumlah waktu CPU yang dikonsumsi. Jadi sudah berjalan selama 8 hari dan menggunakan hampir 7 hari waktu CPU, yang saya anggap mengkhawatirkan.Mendapatkan header dalam doa yang sama itu sulit di terbaik; Saya hanya akan melakukan yang terpisah
ps | head -1
. Anda dapat mempertimbangkan menggunakanps
metode pemilihan sendiri atau sesuatu sepertipgrep
bukangrep
, yang sebenarnya tidak dirancang untuk melewati tajuk.sumber
83
?nice
nilai yang ditetapkan pengguna atau sistem . Angka yang lebih kecil adalah prioritas yang lebih tinggi. Dalam hal ini,grep
adalah prioritas 0 karena diblokir pada disk membaca dan dihasilkan untuk menulis outputnya, danPNetTNetServer.bin
merupakan angka yang besar karena secara konsisten menggunakan timelice-nya tanpa memblokir. (Penjadwalan itu kompleks dan detailnya akan bergantung pada penjadwal yang tepat yang digunakan.)Solusi egrep sederhana dan bermanfaat, tetapi tentu saja Anda bergantung pada header yang selalu berisi 'PID' (asumsi yang lebih masuk akal) dan string yang sama tidak muncul di tempat lain. Saya kira ini sudah cukup untuk kebutuhan Anda, tetapi kalau-kalau ada yang mau ada alternatif.
Sed memungkinkan Anda mengatakan "cetak baris pertama, lalu baris apa pun yang mengandung pola". Sebagai contoh:
Tambahkan
/sed -n/d;
untuk memfilter sendiri:sumber
/sed -n/d
tidak benar Beberapa perintah yang ada mungkin adased -n
, yang ingin Anda cetak. Trik digunakansed -n '1p; /[P]ROCESS_NAME_TO_SEARCH/p'
. ;-) Catat di[]
sekitar karakter apa pun di string pencarian.alternatif yang lebih mudah:
ps -ef | { head -1; grep GMC; }
ganti nomor dengan jumlah baris yang ditampilkan tajuk Anda.
sumber
ps -ef | { head -1; grep GMC; }
. Saya juga menyukainya dalam fungsi seperti berikut:function pgrep() { ps -ef | { head -1; grep $@; } }
Anda bisa mendapatkan pid dengan pgrep
dan kemudian gunakan ps dengan pid
atau bahkan menggabungkan keduanya menjadi satu perintah
Ini akan menunjukkan hanya garis yang Anda inginkan, dan termasuk tajuk.
sumber
Saya menulis sebuah program Perl kecil yang akan dicetak
Saya paling sering menggunakannya
ps | 1andre GMC
, tetapi bisa juga mengambil argumen file (setiap file menyediakan baris header sendiri untuk pertandingan yang dibuat pada baris dari file itu).sumber