Ich möchte diese Ausgabe nach lstart
(Beginn des Prozesses) sortieren :
ps -eo lstart,pid,cmd
Gibt es eine Möglichkeit, lstart im ISO-Format wie JJJJ-MM-TT HH: MM: SS auszugeben?
Aber das Sortieren allein löst es nicht. Ich hätte wirklich gerne ein ISO-Datumsformat.
lstart
so ein komisches Format. Es liegt in der Nähe von RFC 2822, aber mit dem Jahr am Ende.Antworten:
Mit
awk
+date
Kooperation:Alternativer Ansatz mit dem Schlüsselwort ps
etimes
(verstrichene Zeit seit dem Start des Prozesses in Sekunden):date -d -"$1"seconds
- Die Differenz zwischen dem aktuellen Zeitstempel und derelapsed
Zeit gibt den Zeitstempelwert des Prozesses anquelle
etimes
stattdessen das ps-Format verwenden, erhaltenlstart
Sie die verstrichene Zeit in Sekunden, die etwas einfacher zu übermitteln istdate -d -999seconds
.Sie können sortieren mit:
quelle
Beachten Sie, dass dies
lstart
keine der Standard-Unix-ps
Spalten ist.Nicht alle Systeme verfügen über eines, und die Ausgabe variiert zwischen Implementierungen und möglicherweise zwischen Gebietsschemas.
Unter FreeBSD oder mit dem
ps
fromprocps-ng
(wie es normalerweise bei nicht eingebetteten Linux-basierten Systemen derC
Fall ist) und dem Gebietsschema erhalten Sie Folgendes:Unter macOS:
Da der GMT-Offset nicht angezeigt wird, ist die Ausgabe in Zeitzonen, in denen die Sommerzeit implementiert ist (in denen es eine Stunde im Jahr gibt, in der dieselben Daten zweimal vorkommen), nicht eindeutig und nicht immer chronologisch sortiert.
Hier können Sie die UTC-Zeiten erzwingen und mithilfe
perl
desDate::Manip
Moduls das Datum so analysieren, dass verschiedene natürliche Formate verstanden werden:Oder mit
ksh93
denen auch diese Datumsformate erkannt werden:(Vorsicht, es werden nachgestellte Leerzeichen von jeder Zeile entfernt)
Oder mit
zsh
und GNUdate
:Oder nur mit
bash
(oderzsh
) unter Linux und mit GNUdate
:Beachten Sie auch, dass die Prozessstartzeit nicht unbedingt mit der letzten Zeit übereinstimmt, zu der der Prozess einen Befehl ausgeführt hat, da Prozesse im Allgemeinen mehr als einen Befehl in ihrem Leben ausführen können (diejenigen, die dies nicht tun, sind im Allgemeinen diejenigen, die niemals einen Befehl ausführen). . Mit anderen Worten, es entspricht nicht unbedingt der Zeit, zu der der Befehl (
args
Feld, das Standardäquivalent voncmd
) gestartet wurde.Sehen Sie, wie
sleep 123
es als gleichzeitig gestartet angesehen wirdsleep 234
, obwohl es 4 Sekunden später gestartet wurde. Dies liegt daran, dass dieser 9388-Prozess ursprünglich ausgeführt wurdesh
(und 4 Sekunden darauf wartetesleep 4
), bevor er ausgeführt wurdesleep 123
(und zuvorzsh
Code ausgeführt wurde, wie er von meiner interaktiven Shell gespalten wurde , sodass Sie ihn zu unterschiedlichen Zeitpunkten für diesen Prozess hätten in derps
Ausgabe gesehen:zsh
dannsh
, dannsleep
).quelle
Hier ist eine Implementierung mit höherer Leistung (es muss kein neuer Prozess pro Zeile ausgeführt werden):
und dies ermöglicht es auch ziemlich einfach, die Spaltenreihenfolge zu ändern. Zum Beispiel
pid
erste und Startzeit als zweite Spalte:quelle