Como você pode determinar quando uma tarefa em segundo plano foi iniciada?

Como você pode determinar quando uma tarefa em segundo plano foi iniciada?

Ao pesquisar a saída de jobsin bash, você geralmente obterá uma lista como esta:

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

Você pode determinar quando um determinado trabalho foi iniciado peloID de trabalho(ou seja, não olhando para o pid de um lugar como ps)?

Se sim, como?

Responder1

Você pode obter o pid do trabalho em jobs -l, para não precisarcaçaratravés psda saída para encontrar o trabalho. É por isso que você estava tentando evitar ps?

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

funcionará em bash e zsh.

Se você estiver usando zsh, o zsh/parametersmódulo fornecerá a $jobstatesvariável array. Por exemplo:

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

Pode ser mais fácil analisar o pid. E se você estiver em um sistema com /proco carimbo de data e hora no diretório proc informará quando o processo foi iniciado.

$ ls -ld /proc/$$

informação relacionada