Как определить, когда была запущена фоновая задача?

Как определить, когда была запущена фоновая задача?

При просмотре выходных данных jobsв bashвы часто будете получать список, подобный следующему:

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

Можете ли вы определить, когда данная работа была начатаjobid(т.е. не глядя на pid из такого места, как ps)?

Если да, то как?

решение1

Вы можете получить pid задания из jobs -l, так что вам не придетсяохотачерез psвыход, чтобы найти работу. Это то, почему вы пытались избежать ps?

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

будет работать в bash и zsh.

Если вы используете zsh, то zsh/parametersмодуль предоставляет $jobstatesпеременную массива. Например:

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

Это может быть проще для анализа pid. И если вы работаете в системе с , /procто временная метка в каталоге proc скажет вам, когда процесс был запущен.

$ ls -ld /proc/$$

Связанный контент