При просмотре результатов 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 ) &

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

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

1 ответ1

2

Вы можете получить 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

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

$ ls -ld /proc/$$

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .