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