Unix / Javaプロセスは、バックグラウンドに移動すると実行を停止します

クレイグ・オーティス

Appassemblerを使用して作成されたJavaプロセスがあります。開始され、フォアグラウンドで実行されている限り、正常に実行されます。

[ec2-user@ip-xxx ourapp-0.0.1-SNAPSHOT]$ bin/ourapp
Starting in APP_HOME=/home/ec2-user/app_home
Press Q to quit

その後、アプリケーションに正常にアクセスしてテストできます。ただし、バックグラウンドで開始すると、実行が停止するだけでなく、フォアグラウンドに移動せずに復活させることはできません

[ec2-user@ip-xxx ourapp-0.0.1-SNAPSHOT]$ bin/ourapp &
[1] 11661
Starting in APP_HOME=/home/ec2-user/app_home
Press Q to quit
                                                     ## Not accessible!
[ec2-user@ip-xxx ourapp-0.0.1-SNAPSHOT]$  jobs
[1]+  Stopped                 bin/ourapp
[ec2-user@ip-xxx ourapp-0.0.1-SNAPSHOT]$  bg %1
[1]+ bin/ourapp &                                    ## Still not accessible!
[ec2-user@ip-xxx ourapp-0.0.1-SNAPSHOT]$  jobs
[1]+  Stopped                 bin/ourapp
[ec2-user@ip-xxx ourapp-0.0.1-SNAPSHOT]$  fg %1
bin/ourapp                                           ## Now, it's accessible.

私はそれを不適切に始めていますか?バックグラウンドであっても、ジョブを実行し続ける方法はありますか?これをデーモンプロセスとして開始しnohupてからログアウトする必要がありますが、フォアグラウンドプロセスのままにしない限り、正常に実行し続けることができないようです。これは実行不可能です。

クレイグ・オーティス

ほとんどの環境で、入力待機しているバックグラウンドジョブが停止しているようです。

Unix Job ControlのWikipediaページから

制御端末からの読み取りまたは制御端末への書き込みを試みるバックグラウンドプロセスには、SIGTTIN(入力用)またはSIGTTOU(出力用)信号が送信されます。これらのシグナルはデフォルトでプロセスを停止しますが、他の方法で処理することもできます。

そして、Unixの中間使用に関するRutgersページから

バックグラウンドで実行されているジョブは、入力が必要な場合は停止します。バックグラウンドジョブに入力を与えることはできないため、必要なすべての入力が利用可能であることを確認してください。

解決策として、 Javaプロセスを更新して、入力を待つのではなく、メインスレッドを無期限にスリープさせるオプションの引数を受け入れるようにしました。SIGTERM/SIGINT信号を適切に処理するシャットダウンフックがあります。

        if (args.length >= 0 && StringUtils.equals(args[0], "daemon")) {
            while (true) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

実行中のプロセスをバックグラウンドに移動する方法(UNIX)

分類Dev

pidのないUNIXマシンでバックグラウンドで実行されているプロセスを無期限に閉じる方法は?

分類Dev

Unix でバックグラウンド プロセスの数を制限する方法

分類Dev

毎日特定の時間にUnixのバックグラウンドでシェルスクリプトを実行する

分類Dev

Unixでの重複したバックグラウンドプロセス

分類Dev

すでに抑制されているバックグラウンドプロセスの標準出力を切り替える(unix)

分類Dev

Unixスクリプトコマンドは、バッファリングを解除するときにターミナルを壊します

分類Dev

UNIXでmatlabプログラムを実行するbashスクリプトを作成しますか?

分類Dev

Unixへのログイン時にBashスクリプトを自動的に実行する

分類Dev

Unixのバックグラウンドでのsqlplusの実行

分類Dev

java-jarコマンドの実行時にUNIXプロセスIDを取得する方法

分類Dev

SCO Unixは、印刷ジョブを送信するときにインタラクティブスクリプトを実行します

分類Dev

iOSアプリでUNIXコマンドラインプログラム(Berkeleys SPICE)を使用したいと思います。それを使用可能なライブラリにコンパイルするプロセスは何ですか?

分類Dev

UNIXサーバーにアクセスし、Javaアプリケーションからシェルスクリプトを実行します

分類Dev

ログファイルをUNIXベースのサーバーからPCに自動的に移動します

分類Dev

Unixタイムスタンプをインクリメントするために1秒ごとにスレッドを実行しているAndroid

分類Dev

unix-laymanのunixでインタプリタを使用してrスクリプトまたはコマンドを実行する

分類Dev

Unixシェルスクリプトを介してRプログラムを実行する

分類Dev

Unix:ファイルを移動するとき、そのプロセスは何ですか?

分類Dev

プログラムでファイルをサブディレクトリに移動する(unix mvコマンドを使用せずに)

分類Dev

プログラムでファイルをサブディレクトリに移動する(unix mvコマンドを使用せずに)

分類Dev

Goプログラミング言語でUnixドメインソケットを確実にunlink()する方法

分類Dev

UNIXアカウントをロックしているプロセスを追跡する方法

分類Dev

UNIX:fork()とdup2()を使用してループ内でプロセスを実行すると、ループが早期に終了します

分類Dev

phpはバックグラウンドプロセスを実行します

分類Dev

GAEクラウドSQLプロキシは(UNIXではなく)TCPソケットを使用します

分類Dev

Unixシステムや他の同様のシステムは起動スプラッシュ/ロード画面(ある場合)にGPUを使用しますか?

分類Dev

UNIXプログラムを特定のネットワークインターフェイスにバインドする

分類Dev

UNIXプロセスにタグを付ける/ pidをディスクに保存しますか?

Related 関連記事

  1. 1

    実行中のプロセスをバックグラウンドに移動する方法(UNIX)

  2. 2

    pidのないUNIXマシンでバックグラウンドで実行されているプロセスを無期限に閉じる方法は?

  3. 3

    Unix でバックグラウンド プロセスの数を制限する方法

  4. 4

    毎日特定の時間にUnixのバックグラウンドでシェルスクリプトを実行する

  5. 5

    Unixでの重複したバックグラウンドプロセス

  6. 6

    すでに抑制されているバックグラウンドプロセスの標準出力を切り替える(unix)

  7. 7

    Unixスクリプトコマンドは、バッファリングを解除するときにターミナルを壊します

  8. 8

    UNIXでmatlabプログラムを実行するbashスクリプトを作成しますか?

  9. 9

    Unixへのログイン時にBashスクリプトを自動的に実行する

  10. 10

    Unixのバックグラウンドでのsqlplusの実行

  11. 11

    java-jarコマンドの実行時にUNIXプロセスIDを取得する方法

  12. 12

    SCO Unixは、印刷ジョブを送信するときにインタラクティブスクリプトを実行します

  13. 13

    iOSアプリでUNIXコマンドラインプログラム(Berkeleys SPICE)を使用したいと思います。それを使用可能なライブラリにコンパイルするプロセスは何ですか?

  14. 14

    UNIXサーバーにアクセスし、Javaアプリケーションからシェルスクリプトを実行します

  15. 15

    ログファイルをUNIXベースのサーバーからPCに自動的に移動します

  16. 16

    Unixタイムスタンプをインクリメントするために1秒ごとにスレッドを実行しているAndroid

  17. 17

    unix-laymanのunixでインタプリタを使用してrスクリプトまたはコマンドを実行する

  18. 18

    Unixシェルスクリプトを介してRプログラムを実行する

  19. 19

    Unix:ファイルを移動するとき、そのプロセスは何ですか?

  20. 20

    プログラムでファイルをサブディレクトリに移動する(unix mvコマンドを使用せずに)

  21. 21

    プログラムでファイルをサブディレクトリに移動する(unix mvコマンドを使用せずに)

  22. 22

    Goプログラミング言語でUnixドメインソケットを確実にunlink()する方法

  23. 23

    UNIXアカウントをロックしているプロセスを追跡する方法

  24. 24

    UNIX:fork()とdup2()を使用してループ内でプロセスを実行すると、ループが早期に終了します

  25. 25

    phpはバックグラウンドプロセスを実行します

  26. 26

    GAEクラウドSQLプロキシは(UNIXではなく)TCPソケットを使用します

  27. 27

    Unixシステムや他の同様のシステムは起動スプラッシュ/ロード画面(ある場合)にGPUを使用しますか?

  28. 28

    UNIXプログラムを特定のネットワークインターフェイスにバインドする

  29. 29

    UNIXプロセスにタグを付ける/ pidをディスクに保存しますか?

ホットタグ

アーカイブ