Linuxでバックグラウンド実行といえば、「nohup hogehoge &」が定番ですが、単に&をつけた場合や、nouhpのみの場合、またbgの場合の挙動の違いを知りたく、動作確認してみました。
検証に使うコマンドは以下です。
jarファイルはspring bootプロジェクトを固めたもので、実行することによりtomcatが起動します。
java -jar sample.jar
動作確認環境
OS:CentOS Linux release 7.9.2009 (Core)
(サクラインターネットのVPS)
ターミナルソフト:RLogin
検証パターン
以下を試しました。
- パターン1 : ctrl + cを実行
- パターン2 : ctrl + cを実行せずにexitでターミナル切断
- パターン3 : ctrl + cを実行後にexitでターミナル切断
- パターン4 : ctrl + cを実行後ターミナルソフトの×ボタン押下
- パターン5 : ctrl + cを実行せずにターミナルソフトの×ボタン押下
なお、ターミナルソフトのウィンドウの×ボタンをクリックするのは褒められたものではないですし、ソフトによって挙動が変わることも十分考えられるため、あくまで参考程度です。
検証結果
横長になってしまうので、2つの表に分けました。
「パターン1 : ctrl + cを実行」は二重記載になってしまっていますがご容赦ください...
パターン1、2、3
実行コマンド | ctrl+cを実行 | ctrl+cを実行せずにexitで切断 | ctrl+cを実行後にexitで切断 |
---|---|---|---|
java -jar sample.jar & | プロセスは終了しない | プロセスは終了しない | プロセスは終了しない |
nohup java -jar sample.jar | プロセスが終了する | (※コマンド入力が利かない) | プロセスが終了する |
nohup java -jar sample.jar & | プロセスは終了しない | プロセスは終了しない | プロセスは終了しない |
bg(※下記参照) | プロセスは終了しない | プロセスは終了しない | プロセスは終了しない |
パターン1、4、5
実行コマンド | ctrl + cを実行 | ctrl + cを実行後ターミナルを切断 | ctrl + cを実行せずにターミナルを切断 |
---|---|---|---|
java -jar sample.jar & | プロセスは終了しない | プロセスは終了しない | プロセスが終了する |
nohup java -jar sample.jar | プロセスが終了する | プロセスが終了する | プロセスは終了しない |
nohup java -jar sample.jar & | プロセスは終了しない | プロセスは終了しない | プロセスは終了しない |
bg(※下記参照) | プロセスは終了しない | プロセスが終了する | プロセスが終了する |
bgコマンドについて
bgコマンドは、一度フォアグラウンドで起動したものを、途中からバックグラウンドに切り替えるコマンドです。最初からバックグラウンド実行するものではありません。
まず
java -jar sample.jar
とフォアグラウンド起動しておいてから、ctrl + zで一時停止させた後、bgコマンドを実行します。
上記の一覧表は、bgコマンド実行後に確認したものです。
まとめ
やはり
nohup java -jar sample.jar &
が最強。