Java看门狗监控

标签 java linux windows monitoring

<分区>

我正在尝试用 java(windows 和 linux)开发一个看门狗,它将以两种方式运行:

1) 被动监测。

进程完成工作后,看门狗需要检查进程完成的返回值。 (退出(1),退出(0)...)

2) 主动监控。

进程每隔interval(x)就需要“touch”一个属于自己的文件。 如果进程通过检查文件戳“触摸”他的文件,看门狗将检查每个时间间隔 (y)。 如果进程没有接触文件,看门狗将尝试向接触文件的进程发送信号。 主动监控的目的是杀死有死锁的进程。

看门狗将启动所有进程。

1) 如何发送进程信号的 jvm?一个信号是进程触摸文件的“提醒”。 另一个信号是终止进程。

2) 如何在线程上实现这个想法?

3) 我可以使用 Java 中的任何 API?

谢谢

最佳答案

  1. 您可以通过写入/读取进程 int/outputstream 来“通知”进程
  2. 好吧,实现线程(见下文)
  3. 我不知道...

也许这段代码有帮助

public class ProcessTest {

    public static void main(String[] args) {
        new ProcessTest().start();
    }

    private void start() {
        startWatchDog();
        startProcess();
    }

    private boolean abortCondition = false;
    private int watchDogTSleepTime = 3000; //3 sek
    private void startWatchDog() {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                while(!abortCondition){
                    try {
                        Thread.sleep(watchDogTSleepTime);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    //check the file touch
                    boolean ok = checkFileTouch();

                    try {
                        //send signals to the process
                        outStream.write("signal".getBytes() );
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    //if you want, you might try to kill the process
                    process.destroy();
                }
            }
        };

        Thread watchDog = new Thread(r);
        watchDog.start();
        //watchDog.setDaemon(true); //maybe
    }

    private boolean checkFileTouch(){
        //...
        return false;
    }

    private InputStream inStream;
    private OutputStream outStream;
    private Process process;
    private void startProcess() {       
        String[] cmd = new String[]{"foo.exe", "para1", "param2"};
        try {
            //create and start the process
            process = Runtime.getRuntime().exec(cmd);
            inStream = process.getInputStream();
            outStream = process.getOutputStream();          
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

关于Java看门狗监控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20634144/

相关文章:

windows - OllyDbg 不能在 Windows 7 x64 上运行

java - 正则表达式从文本java验证意大利名字

java - GMAIL:发送一封包含多个地址的电子邮件或发送多封电子邮件。哪一个更好?

c# - 从应用程序构建操作系统

linux wget 安全认证

linux - 将 awk 输出保存到变量 BASH

c++ - pthread_create 无法与 pthread_attr_setschedparam 一起正常工作

c++ - 从命令行应用程序调用 Windows 通用对话框

java - 生成文件问题

c# - .NET 6 工作线程服务停止时出现错误