Wie können Sie feststellen, wann eine Hintergrundaufgabe gestartet wurde?

413
warren

Beim Überblicken der Ausgabe von jobsin erhalten bashSie oft eine Liste wie die folgende:

[root@csx-tzg-sac-01 ~]# jobs [2] Running ( sleep 600 && ls -lh ~ossadmin/*.iso ) & [3]- Running ( sleep 900 && ls -lh ~ossadmin/*.iso ) & [4]+ Running ( sleep 900 && ls -lh ~ossadmin/*.iso ) & 

Können Sie feststellen, wann ein bestimmter Job von der Job- ID gestartet wurde (dh, indem Sie nicht die PID von einem Ort aus betrachten ps)?

Wenn das so ist, wie?

0

1 Antwort auf die Frage

2
Phil P

Sie können aus der pid des Jobs zu bekommen jobs -l, so dass Sie nicht haben zu jagen durch psAusgabe den Job zu finden. Haben Sie deshalb versucht zu vermeiden ps?

jobs -l | sed 's/^\[[0-9]*\][^0-9]*\([0-9][0-9]*\)[^0-9].*/\1/' | xargs ps up 

funktioniert in bash und zsh.

Wenn Sie zsh verwenden, zsh/parametersstellt das Modul die $jobstatesArray-Variable bereit . Z.B:

% echo $jobstates[1] running:-:14975=running 

Es kann einfacher sein, die PID zu analysieren. Wenn Sie sich in einem System befinden, /procwird Ihnen der Zeitstempel im Prozessverzeichnis mitzuteilen, wann der Prozess gestartet wurde.

$ ls -ld /proc/$$ 
Bash hat `jobs -p% 1`, um die PID zu drucken. grawity vor 12 Jahren 2
Ja, ich versuche, "ps" zu vermeiden, weil ich die PID möglicherweise an eine Startzeit binden kann oder nicht (vielleicht laufen dort ein halbes Dutzend Befehle, die ansonsten identisch sind, aber nach Sekunden oder Minuten getrennt sind) schwer / unmöglich sein warren vor 12 Jahren 0
Richtig, also funktioniert meine Lösung für Sie: Holen Sie sich die PID von Jobs und fordern Sie dann die ps-Details für diese eine bestimmte PID an. Sie suchen den Prozess nicht mehr nach Namen, sondern suchen einfach nach. Phil P vor 12 Jahren 0