あるmatlabスクリプトsample.m
をバックグラウンドで実行したいとき, rオプションをつけて
ダメな例
nohup matlab -r sample &
と書く.
しかし, このように書いてしまうと, プログラム終了後Matlabが永遠と標準入力から読み取ろうとしてエラーを出し続ける.
その結果, nohupの出力であるnohup.out
が数十ギガになるような危険事態が発生する. (気づかなければHDDを埋め尽くす)
sample.m
の最後にexit
と書けばこの問題は解決されるように思えるが, プログラム中でエラーが発生したときにも, 同じ事態が発生する.
解決策は次のようにすることである.
良い例
nohup matlab -r sample < /dev/null &
/dev/null
はLinuxでEOFを返す特殊なものである.
こうすることで, プログラムがどのように終了しても, matlabがEOF(終了)を受け取って, 正常に終了してくれる.
/dev/null
に限らず, touch null
などで空ファイルnull
を作成して, 渡してあげてもよい: nohup matlab -r sample < null &