如何使用Powershell的退出代码重新启动我关闭的客户端/服务器对?



我有一个简单的Java客户端-服务器应用程序(在前面的Stack问题中链接的代码),我可以与以下Powershell代码一起运行:

Start-Process java "-cp .;.libcommons-io-2.4.jar  FixedMessageSequenceServer"
Start-Sleep -Seconds 1
$JavaClient = Start-Process java "-cp .;.libcommons-io-2.4.jar FixedMessageSequenceClient -Wait -PassThru"

这工作正常。但是,我想添加Powershell代码或Java代码,如果我们强制关闭(CTRL-C)应用程序(从服务器端),它将重新启动上述Powershell代码。

我想我应该是苹果来使用这段代码:

if($JavaClient.ExitCode)
{
    # exit code is non-zero, better retry
    Start-Process java "-cp .;.libcommons-io-2.4.jar  FixedMessageSequenceServer" -Wait
    Start-Process java "-cp .;.libcommons-io-2.4.jar FixedMessageSequenceClient -Wait -PassThru"
}

但是,当我运行它时,这不会做任何事情。我需要附加一些 Java ProcessBuilder代码来实现所需的功能吗? 我们需要处理$JavaClient.ExitCode吗?

谢谢

如果您只在单个 if 语句上求值,则即使您的代码确实有效,您也有一个小窗口可以重新启动。

我建议您创建一个小型轮询脚本,该脚本将每 10 秒、1 分钟等检查一次某个进程的状态,如果它没有运行,它可以以这种方式启动它。如果 java 客户端应该始终运行,则可以将其嵌套在无限循环中,或者如果脚本应该以一致的间隔/触发器运行(即每小时运行一次,等等),您可以使用计划任务来启动脚本。

尝试这样的事情:

if(![bool](get-process java -ErrorAction SilentlyContinue)){
    start-process java "-cp .;.libcommons-io-2.4.jar FixedMessageSequenceClient -Wait -PassThru"
}

我有以下代码可以工作,但它不是很优雅的方式:

这是我的Java类:

import java.io.*;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class FixedMessageRunner{
public static void main(String[] args) {
  //  File file = new File("C://Java_Scratch_//Autonomic_Using_Batch//someFile.txt" );
  try {
   /* StackOverflow code */  
    for  (  ;  ; )  {
     ProcessBuilder pb = new ProcessBuilder("Powershell ", "WindowsTaskSchedulerPS.PS1");
     pb.directory(new File("C://Java_Scratch3_new_cleaned_Mar12//"));
     Process p = pb.start();
     p.waitFor();   
    }   
  /* end - StackOverflow code */  
  }
  catch (IOException i) {
    i.printStackTrace();
  }

  catch (InterruptedException i) {
    i.printStackTrace();
  }

 // end-count_func

}
}

这是我的Powershell代码,标准代码:

# exit code is non-zero, better retry
Start-Process java "-cp .;.libcommons-io-2.4.jar  FixedMessageSequenceServer" 
Start-Sleep -Seconds 1
Start-Process java "-cp .;.libcommons-io-2.4.jar FixedMessageSequenceClient"

当我运行Java代码时,我需要从Windows任务管理器中杀死Powershell.exe以触发上述waitFor()

相关内容

最新更新