Je voudrais trier cette sortie par lstart
(début du processus):
ps -eo lstart,pid,cmd
Existe-t-il un moyen de sortir lstart au format ISO comme AAAA-MM-JJ HH: MM: SS?
Mais le tri seul ne le résout pas. J'aimerais vraiment avoir le format de date ISO.
lstart
un tel format bizarre. C'est proche de RFC 2822 mais avec l'année à la fin.Réponses:
Avec
awk
+date
coopération:Approche alternative à l'aide du mot clé ps
etimes
(temps écoulé depuis le démarrage du processus, en secondes):date -d -"$1"seconds
- différence entre l'horodatage actuel et l'elapsed
heure, donnera la valeur d' horodatage du processusla source
etimes
au lieu delstart
vous obtenez le temps écoulé en secondes, ce qui est un peu plus facile à passerdate -d -999seconds
.Vous pouvez trier avec:
la source
Notez que ce
lstart
n'est pas l'une desps
colonnes Unix standard .Tous les systèmes n'en ont pas et la sortie varie entre les implémentations et potentiellement entre les paramètres régionaux.
Par exemple, sur FreeBSD ou avec le
ps
fromprocps-ng
(comme on le trouve généralement sur les systèmes Linux non intégrés) et lesC
paramètres régionaux, vous obtiendrez:Sur macOS:
De plus, comme il ne vous donne pas le décalage GMT, la sortie est ambiguë dans les fuseaux horaires qui implémentent l'heure d'été (où il y a une heure dans l'année où les mêmes dates se produisent deux fois) et ne trient pas toujours chronologiquement.
Ici, vous pouvez forcer les heures à être UTC et utiliser
perl
leDate::Manip
module de pour analyser la date d'une manière qui comprend différents formats naturels:Ou avec
ksh93
lequel reconnaît également ces formats de date:(attention, il supprime les blancs de fin de chaque ligne)
Ou avec
zsh
et GNUdate
:Ou avec
bash
(ouzsh
) sur Linux uniquement et avec GNUdate
:Sachez également que l'heure de début du processus n'est pas nécessairement la même que la dernière fois que le processus a exécuté une commande car les processus peuvent généralement exécuter plus d'une commande au cours de leur vie (ceux qui ne le sont généralement pas ceux qui n'exécutent jamais une commande) . En d'autres termes, cela ne correspond pas nécessairement au moment où la commande (
args
champ, l'équivalent standard decmd
) a été lancée.Voyez comment
sleep 123
est considéré comme démarré en même temps quesleep 234
même s'il a été démarré 4 secondes plus tard. C'est parce que ce processus 9388 était initialement en cours d'exécutionsh
(et attendait 4 secondessleep 4
) avant d'être exécutésleep 123
(et avant cela, il exécutait duzsh
code tel qu'il était bifurqué par mon shell interactif, donc à différents moments, pour ce processus, vous auriez vu dans laps
sortie:,zsh
alorssh
, alorssleep
).la source
Voici une implémentation avec des performances plus élevées (n'a pas besoin d'exécuter un nouveau processus par ligne):
et cela permet aussi de changer assez facilement l'ordre des colonnes. Par exemple, la
pid
première et l'heure de début dans la deuxième colonne:la source