Chciałbym posortować te dane wyjściowe według lstart
(początek procesu):
ps -eo lstart,pid,cmd
Czy istnieje sposób na wyjście lstart w formacie ISO, takim jak RRRR-MM-DD GG: MM: SS?
Ale samo sortowanie nie rozwiązuje tego. Naprawdę chciałbym mieć format daty ISO.
lstart
ma tak dziwny format. Jest zbliżony do RFC 2822, ale z końcem roku.Odpowiedzi:
Przy współpracy
awk
+date
:Alternatywne podejście przy użyciu słowa kluczowego ps
etimes
(czas, który upłynął od rozpoczęcia procesu, w sekundach):date -d -"$1"seconds
- różnica między bieżącym znacznikiem czasu aelapsed
czasem, poda wartość znacznika czasu procesuźródło
etimes
zamiast tegolstart
użyjesz formatu ps , otrzymasz upływ czasu w sekundach, który jest nieco łatwiejszy do przejściadate -d -999seconds
.Możesz sortować za pomocą:
źródło
Zauważ, że
lstart
nie jest to jedna ze standardowychps
kolumn uniksowych .Nie wszystkie systemy mają jeden, a wyniki różnią się między implementacjami i potencjalnie między lokalizacjami.
Na przykład, na FreeBSD lub z
ps
odprocps-ng
(jak zwykle znaleźć na non-wbudowane systemy oparte na systemie Linux) oraz naC
lokalizacji, dostaniesz:Na macOS:
Ponadto, ponieważ nie daje to przesunięcia GMT, dane wyjściowe są niejednoznaczne w strefach czasowych, które implementują DST (gdzie jest jedna godzina w ciągu roku, w której te same daty występują dwa razy) i nie zawsze sortują się chronologicznie.
Tutaj można zmusić razy, aby być UTC i używać
perl
„sDate::Manip
moduł do analizowania datę w sposób zrozumiały dla różnych formatów naturalne:Lub z
ksh93
którymi rozpoznaje również te formaty dat:(uwaga: usuwa ona końcowe spacje z każdej linii)
Lub z
zsh
i GNUdate
:Lub z
bash
(lubzsh
) tylko w systemie Linux i GNUdate
:Uważaj również, aby czas rozpoczęcia procesu niekoniecznie był taki sam jak ostatni raz, gdy proces wykonał polecenie, ponieważ procesy mogą generalnie wykonać więcej niż jedno polecenie w ciągu swojego życia (te, które nie są tymi, które nigdy nie wykonują polecenia) . Innymi słowy, niekoniecznie odpowiada to czasowi uruchomienia polecenia (
args
pola, standardowego odpowiednikacmd
).Zobacz, jak
sleep 123
widać, że został uruchomiony w tym samym czasie,sleep 234
nawet jeśli został uruchomiony 4 sekundy później. Dzieje się tak, ponieważ proces 9388 początkowo działałsh
(i czekał 4 sekundysleep 4
) przed jego wykonaniemsleep 123
(a wcześniej działałzsh
kod, ponieważ został rozwidlony przez moją interaktywną powłokę, więc w różnych momentach dla tego procesu miałbyś widoczne w danychps
wyjściowych:zsh
wtedysh
, potemsleep
).źródło
Oto implementacja o wyższej wydajności (nie trzeba wykonywać nowego procesu na linię):
i pozwala to również dość łatwo zmieniać kolejność kolumn. Na przykład
pid
pierwsza i godzina rozpoczęcia jako druga kolumna:źródło