1

Linuxボックスで実行されている単純なJavaプログラムがあり、プログラムは基本的に、たとえば1時間ごとに実行される繰り返しタスクをスケジュールするため、そこに座っているデーモンスレッドのようなものですが、完全ではありません. プログラムがまだ Linux で実行されているかどうか、および実行中のプログラムを終了する方法を知りたいのですが。cancel メソッドをトリガーする方法を見つける必要がありますか? または、Linuxコマンドを使用して強制終了できますか? または、停止して実行するスクリプトを作成する必要がありますか? これが自由回答の質問であるかどうかはわかりませんが、実際には何が最善のアプローチですか.

ここに私のJavaコードがあります

        public static void main(String [] args){
               ScheduledExecutorService task = 
                                 Executors.newSingleThreadScheduledExecutor();

               task.scheduleAtFixedRate(new Task(),0,1,TimeUnit.HOURS);
        }

        static class Task{
             @Override
             public void run(){
                    //do something
             }
        }
4

3 に答える 3

1

(sun.misc.Signal) を介してシグナルハンドラを使用します。シグナルを受け取った場合は、executor で shutdown() を呼び出して処理します。

例えば:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import sun.misc.Signal;
import sun.misc.SignalHandler;

public class Main {
    public static void main(String[] args) {
        final ScheduledExecutorService task = Executors
                .newSingleThreadScheduledExecutor();

        task.scheduleAtFixedRate(new Task(), 0, 1, TimeUnit.HOURS);
        SignalHandler sh = new SignalHandler() {

            @Override
            public void handle(Signal arg0) {
                task.shutdown();
            }
        };

        Signal.handle(new Signal("USR1"), sh);
    }

    static class Task implements Runnable {
        @Override
        public void run() {
            // do something
        }
    }
}
于 2012-11-13T16:46:41.543 に答える
1

プログラムがまだ Linux で実行されているかどうか、および実行中のプログラムを終了する方法を知るにはどうすればよいですか?

既存のコードについて話している場合は、プログラムにフックが組み込まれていない限り、SOL です。

実際の最善のアプローチは何ですか。

これを実現するには多くの方法があります。JMXを使用します。cancel()タイマー タスク スレッドを停止するメソッドを呼び出す JMX 操作を公開するだけです。多くの異なる JMX コマンドライン クライアントがあり、いつでも jconsole を使用できます。

JMX メソッドを公開する方法は、使用しているフレームワークによって大きく異なります。私のSimpleJmx ライブラリを使用すると、これをかなり簡単に実現できます。

于 2012-11-14T03:23:19.837 に答える
1

多くの方法があります。

Google for ipc(プロセス間通信)。

...および/またはcron時々プロセスを停止するようにプログラムします...

于 2012-11-13T17:45:52.237 に答える