При просмотре выходных данных 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/$$