コマンドプロンプトで実行するとjobs -l
実行中のジョブの状態が表示されますが、./tmp.shファイルで実行すると
#! /bin/bash
jobs -l
空の出力を表示します。
なぜそんなことですか?シェルスクリプト内で特定のジョブの状態に関する情報をどのように取得できますか?
答え1
jobs
採用発表を見る現在のシェルで管理。スクリプトは独自のシェル内で実行されるため、jobs
スクリプトシェルによって管理されているタスクのみが表示されます。
実際に表示するには、以下を実行してください。
#!/bin/bash
sleep 60 &
jobs -l
スクリプト内のシェルスクリプトの前に開始された「作業」に関する情報を表示するには、それを一般的なプロセスとして扱って使用する必要がありますps
。スクリプト内の変数を使用して、親シェル(存在する場合はスクリプトを起動したシェル)から開始されたプロセスに自分自身を制限し、$PPID
同じ親PIDを共有するプロセスを見つけることができます。