プログラミングを勉強している方は
main関数の「return 0;」はおまじないだから、とりあえず書いておきなさい
と習うことが多いかもしれません。
このおまじない、実は書く意味をちゃんと理解しておいた方がいい場面もやってくるかもしれません。
特に、ジョブを管理する際にこのおまじないの理解は必須ですので、説明していきます。
そもそもreturn文とは?
return文はサブルーチンから戻ってくる際に使われ、値を返すことができるものになります。
main関数からサブルーチンを呼び出し実行させた際、サブルーチンの実行結果をmain関数へ戻り値として返します。
じゃあ、main関数でreturn文を使ったら値はどこに返ってくるの?
と疑問に思う方もいるかもしれません。
main関数のreturn文で設定した値は、OSに返されます。
OSとはもちろん、このプログラムの実行元であるPCそのものを指します。
OSに値を返すことは分かったけど、それって意味あるの?
という疑問もあると思います。
プログラムが正常終了したらreturn 0;でOSに0を返すなんてよく聞きますが、OSが0を受け取ってプログラムが正常終了したことを理解したところで、通常は何かあるわけではありません。
ですがこれ、ジョブ管理システムでは非常に大切な話になってきます。
ジョブ管理システム
ジョブ管理システムとは、複数のジョブの起動や終了を制御したり、それぞれのジョブが正しく動いたかどうかを監視するシステムです。
代表的なものでは日立のJP1などがありますね。
ここでいうジョブとは、プログラムのことを指します。
大規模なシステムというのは、1つのプログラムでは動いていません。
いくつもの、それこそ何十本ものプログラムが決められた順番通りに動いてシステムを処理していきます。
このプログラムの決められた実行順序をジョブネットと言います。
ジョブネットをジョブ管理システムに登録しておくことで、決められた時間に自動的にジョブネットを実行してくれます。
ジョブネットの監視でreturn値が役に立つ
そんな何十本ものプログラムが集まったジョブネットですが、実行中にあるプログラムがエラーを起こしてしまった場合、そのプログラム以降に動く予定のプログラムが正常な動作をしてくれない場合があります。
大規模なシステムでこの問題が発生してしまうと、誤ったデータが登録されるなど、場合によっては大損害になりかねません。
そうした場合に、ジョブ管理システムでは各プログラムの動きを監視して、正常に終了していなければその時点でジョブネットそのものを停止させることができます。
この監視に用いられるのが、各プログラムの終了コード、つまりreturn文でOSへと返された値を元に判定しているのです。
返された値が0であれば正常終了だから次のプログラム、255であれば異常終了だからジョブネットを停止させる等、返された値を元に処理を振り分けることができます。
普段は何気なく書いているmain関数のreturn文は、こういう場面で非常に重要な意味を持つのです。
まとめ
大規模なシステム開発を行う場合はジョブ管理システムを利用することが多いです。
return 0;は慣れないうちはおまじないとして書いていても問題ありませんが、そうした大規模なシステム開発に携わる場合は、OSに返される値は大きな意味を持つことを理解しておきましょう!