バックグラウンド タスクがいつ開始されたかをどのように判断できますか?

バックグラウンド タスクがいつ開始されたかをどのように判断できますか?

jobsinの出力を調査すると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

からジョブの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 の解析が容易になります。また、システムを使用している場合は、/procproc ディレクトリのタイムスタンプから、プロセスがいつ開始されたかがわかります。

$ ls -ld /proc/$$

関連情報