ジョブ定義スクリプトを子孫ジョブとして実行する方法について説明します。その他のコマンドとの実行方法の比較については,「5.1.9 外部コマンドの実行」を参照してください。
(1) 子孫ジョブの動作
ルートジョブの子孫プロセスとして実行されるジョブ定義スクリプトのうち,CHILDJOB_SHEBANGパラメーター(Windows,Linux限定)によって実行されたジョブを子孫ジョブと呼びます。
子孫ジョブを起動するには,ジョブ定義スクリプトにCHILDJOB_SHEBANGパラメーター(Windows,Linux限定)で定義したファイルをコマンド名として指定します。
子孫ジョブを起動する場合のジョブ定義スクリプトの例を次に示します。
cmdA |
この例では,コマンド名にほかのジョブ定義スクリプトchildjob.ashを指定しています。このとき,JP1/Advanced Shellは子プロセスとしてJP1/Advanced Shellのジョブを起動し,childjob.ashを子孫ジョブとして実行します。この場合の子孫ジョブを起動する動作の例を次の図に示します。
図3-1 子孫ジョブを起動する動作の例
(2) ルートジョブや外部スクリプトとの機能比較
ルートジョブ,子孫ジョブおよび外部スクリプトの機能比較を次に示します。
機能 | ジョブ | 外部スクリプト | ||
---|---|---|---|---|
ルートジョブ | 子孫ジョブ | .コマンドの外部スクリプト | #-adsh_scriptの外部スクリプト | |
呼び出し元ジョブとのプロセスの関係 | 呼び出し元ジョブの子プロセスで動作する | 呼び出し元ジョブの子プロセスで動作する | 呼び出し元ジョブと同一プロセスで動作する | 呼び出し元ジョブと同一プロセスで動作する |
起動するジョブコントローラ |
|
| なし | なし |
スプールジョブディレクトリ | 作成する | ルートジョブのスプールジョブディレクトリ内に作成し,ジョブ終了時に削除する。 ジョブ実行ログはJOBLOGだけをstderrに出力する | 作成しない。 (コマンド実行結果を呼び出し元ジョブのJOBLOGに出力する。また,スクリプトイメージは出力しない) | 作成しない。 (コマンド実行結果を呼び出し元ジョブのJOBLOGに出力する。また,スクリプトイメージを呼び出し元ジョブのSCRIPTに出力する) |
ジョブ開始・終了メッセージ | あり (KANX0091-IおよびKNAX0098-I) | あり (KANX6571-IおよびKNAX6578-I) | なし | なし |
起動したコマンドを必ずwaitするか | CHILDJOB_SHEBANG(Windows,Linux限定)パラメーターの指定があれば,必ずwaitする | CHILDJOB_SHEBANG(Windows,Linux限定)パラメーターの指定があれば,必ずwaitする | 呼び出し元ジョブの動作に従う | 呼び出し元ジョブの動作に従う |
環境ファイルの読み込み | する | する | しない (呼び出し元ジョブの動作に従う) | しない (呼び出し元ジョブの動作に従う) |
標準入力の使用可否 | 使用可 | 使用可 | 使用可 | 使用可 |
標準出力の出力先 | -sオプション,およびOUTPUT_STDOUT(Windows,Linux限定)パラメーターの指定に従う | 親プロセスから継承した出力先になる | 呼び出し元ジョブの動作に従う | 呼び出し元ジョブの動作に従う |
(3) 子孫ジョブの非同期実行に関する注意事項
子孫ジョブの機能を使用(CHILDJOB_SHEBANGパラメーターを環境ファイルに1つ以上指定)した場合,関連するすべてのルートジョブと子孫ジョブが終了するまでは,ジョブは終了しません。そのため,&や|&による非同期実行を指定して実行したプロセスがすべて完了するまでジョブは終了しません。
また,CHILDJOB_SHEBANGパラメーターを指定した場合と指定しない場合とで,execコマンドの引数に外部コマンドを指定したときのadshexecコマンドの動作は次のように異なります。
CHILDJOB_SHEBANGパラメーターを環境ファイルに1つ以上指定してadshexecコマンドを実行した場合,ジョブ終了時に非同期実行プロセスをwaitすることを通知するメッセージKNAX7901-Iが出力されます。このメッセージは,ジョブ実行ログ,システム実行ログおよび標準エラー出力へ出力されます。
(4) シグナル受信時の子孫ジョブの動作
ここでは,シグナル受信時の子孫ジョブの動作を説明します。
次に示すジョブを例に,ルートジョブ,子孫ジョブ,および外部コマンドへ終了要求シグナルを送信した場合の動作を示します。
adshexec(1)-adshexec(2)-adshexec(3)-sleep |
JP1/AJSから強制終了(JP1/AJSからadshexec(1)へSIGTERM送信)した際,およびログインシェルからadshexec(1)~(3)およびsleepへSIGTERM送信した際の動作を次に示します。
adshexec(1) | rc=143でエラー終了 |
adshexec(2) | rc=143でシグナルによるエラー終了 |
adshexec(3) | rc=143でシグナルによるエラー終了 |
sleep | rc=143でシグナルによるエラー終了 |
adshexec(1) | rc=143でシグナルによるエラー終了 |
adshexec(2) | rc=143でシグナルによるエラー終了 |
adshexec(3) | rc=143でシグナルによるエラー終了 |
sleep | rc=143でシグナルによるエラー終了 |
adshexec(1) |
|
adshexec(2) | rc=143でシグナルによるエラー終了 |
adshexec(3) | rc=143でシグナルによるエラー終了 |
sleep | rc=143でシグナルによるエラー終了 |
adshexec(1) | adshexec(2)の結果に従う |
adshexec(2) |
|
adshexec(3) | rc=143でシグナルによるエラー終了 |
sleep | rc=143でシグナルによるエラー終了 |
adshexec(1) | adshexec(2)の結果に従う |
adshexec(2) | adshexec(3)の結果に従う |
adshexec(3) |
|
sleep | rc=143でシグナルによるエラー終了 |