Edited at

matlabでnohupを使うとプログラムが終了しない件

ある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 &