Saya ingin menyortir output ini dengan lstart
(mulai dari proses):
ps -eo lstart,pid,cmd
Apakah ada cara untuk menghasilkan lstart dalam format ISO seperti YYYY-MM-DD HH: MM: SS?
Tetapi menyortir sendiri tidak menyelesaikannya. Saya benar-benar ingin memiliki format tanggal ISO.
lstart
memiliki format yang aneh. Itu dekat dengan RFC 2822 tetapi dengan tahun pada akhirnya.Jawaban:
Dengan
awk
+date
kerja sama:Pendekatan alternatif menggunakan kata kunci ps
etimes
(waktu yang berlalu sejak proses dimulai, dalam detik):date -d -"$1"seconds
- perbedaan antara cap waktu saat ini danelapsed
waktu, akan memberikan nilai cap waktu prosessumber
etimes
alih-alihlstart
Anda mendapatkan waktu yang berlalu dalam detik yang sedikit lebih mudah untuk dilewatkandate -d -999seconds
.Anda dapat mengurutkan dengan:
sumber
Perhatikan bahwa
lstart
itu bukan salah satu darips
kolom Unix standar .Tidak semua sistem memiliki satu, dan output bervariasi antara implementasi dan berpotensi antar lokal.
Misalnya, di FreeBSD atau dengan
ps
dariprocps-ng
(seperti yang biasanya ditemukan pada sistem berbasis Linux yang tidak tertanam) danC
lokal, Anda akan mendapatkan:Di MacOS:
Juga, karena tidak memberi Anda offset GMT, outputnya ambigu dalam zona waktu yang menerapkan DST (di mana ada satu jam selama tahun di mana tanggal yang sama terjadi dua kali) dan tidak selalu menyortir secara kronologis.
Di sini, Anda bisa memaksa kali menjadi UTC dan menggunakan
perl
'sDate::Manip
modul untuk mengurai tanggal dengan cara yang mengerti format alam yang berbeda:Atau
ksh93
yang juga mengenali format tanggal tersebut:(hati-hati, strip kosong kosong dari setiap baris)
Atau dengan
zsh
dan GNUdate
:Atau dengan
bash
(atauzsh
) hanya di Linux dan dengan GNUdate
:Berhati-hatilah juga bahwa waktu mulai proses tidak harus sama dengan waktu terakhir proses mengeksekusi suatu perintah karena proses secara umum dapat menjalankan lebih dari satu perintah dalam masa hidup mereka (yang biasanya bukan yang tidak pernah menjalankan perintah) . Dengan kata lain, itu tidak selalu sesuai dengan waktu perintah (
args
bidang, standar yang setara dengancmd
) dimulai.Lihat bagaimana
sleep 123
ini dilihat sebagai telah dimulai pada saat yang samasleep 234
meskipun itu dimulai 4 detik kemudian. Itu karena proses 9388 itu awalnya berjalansh
(dan menunggu 4 detiksleep 4
) sebelum dieksekusisleep 123
(dan sebelum itu, itu menjalankanzsh
kode seperti yang bercabang oleh shell interaktif saya, jadi pada titik waktu yang berbeda, untuk proses itu, Anda harus memiliki terlihat dips
output:,zsh
lalush
, lalusleep
).sumber
Berikut ini adalah implementasi dengan kinerja yang lebih tinggi (tidak perlu menjalankan proses baru per baris):
dan ini memungkinkan cukup mudah untuk mengubah pemesanan kolom juga. Misalnya
pid
pertama dan waktu mulai sebagai kolom kedua:sumber