¿Cómo se puede determinar cuándo se inició una tarea en segundo plano?

¿Cómo se puede determinar cuándo se inició una tarea en segundo plano?

Al examinar el resultado de jobsin bash, a menudo obtendrá una lista como la siguiente:

[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 ) &

¿Puede determinar cuándo un trabajo determinado fue iniciado por elIdentificación del trabajo(es decir, no mirando el pid desde un lugar como ps)?

¿Si es así, cómo?

Respuesta1

Puede obtener el pid del trabajo de jobs -l, para no tener que hacerlocazaa través de psla salida para encontrar el trabajo. ¿Es por eso que intentabas evitarlo ps?

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

funcionará en bash y zsh.

Si está utilizando zsh, entonces el zsh/parametersmódulo proporciona la $jobstatesvariable de matriz. P.ej:

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

Puede ser más fácil analizar el pid. Y si está en un sistema con /procla marca de tiempo en el directorio de proceso le indicará cuándo se inició el proceso.

$ ls -ld /proc/$$

información relacionada