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

0

Ao pesquisar a saída de jobs em bash , você frequentemente obterá uma lista como a seguinte:

[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 pelo jobid (ou seja, não olhando o pid de um lugar como ps )?

Se sim, como?

    
por warren 17.08.2011 / 00:55

1 resposta

2

Você pode obter o pid do trabalho em jobs -l , para que você não precise caçar através da saída ps 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].*//' | xargs ps up

funcionará em bash e zsh.

Se você estiver usando zsh, o módulo zsh/parameters fornecerá a variável $jobstates array. Por exemplo:

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

Isso pode ser mais fácil de analisar o pid. E se você estiver em um sistema com /proc , o registro de data e hora no diretório proc dirá quando o processo foi iniciado.

$ ls -ld /proc/$$
    
por 17.08.2011 / 01:47