优雅地停止 .net 启动的 Java 进程

发布于 2024-08-06 04:57:58 字数 581 浏览 3 评论 0原文

有了下一个 .net 代码,我想正确停止它,以便 jvm 执行它的 ShutdownHooks。

System.Diagnostics.Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.WorkingDirectory = @"C:\test\";
p.StartInfo.FileName = @"C:\Program Files\Java\jre6u16\bin\java.exe";
p.StartInfo.Arguments = "-jar TheExecutable.jar";

尝试使用 p.Kill() 停止进程将强制 jvm 停止,而不发送在 UNIX Kill 命令中找到的等效 SIGTERM。或者,我做错了什么,因为 java 进程没有执行它的关闭挂钩。

谢谢 !

Having the next .net code, I want to stop it correctly so that the jvm executes it's ShutdownHooks.

System.Diagnostics.Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.WorkingDirectory = @"C:\test\";
p.StartInfo.FileName = @"C:\Program Files\Java\jre6u16\bin\java.exe";
p.StartInfo.Arguments = "-jar TheExecutable.jar";

Trying to stop the process with p.Kill() will force the jvm to stop without sending the equivalent SIGTERM found in the unix kill comand. Or maeby I am doing something wrong because the java process does not get it's shutdown hooks executed.

Thanks !

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

吐个泡泡 2024-08-13 04:57:58

如果您可以控制 Java 代码,则可以检测到相当正常的情况,例如 stdin 中的文件结束,或 stdin 中所谓的毒丸,以及使用它来决定(在 Java 中)现在是退出的时间。

然后,要终止 java 进程,请对其 stdin 执行所需的操作。

另一种选择是编写一个信号处理程序, - 参见 sun.misc.SignalHandler,并将其注册到 sum.misc.Signal

其他选项看起来相当可怕 - 比如轮询父级处理或查看文件。

If you have control over the Java code, you could detect a fairly normal situation like End-Of-File in stdin, or a so-called poison pill in stdin, and use that to decide (in Java) that now is the time to exit.

Then to kill the java process, do whatever is needed to its stdin.

Another option is to write a signal handler, - see sun.misc.SignalHandler, and register this with sum.misc.Signal

Other options seem rather hideous - like polling the parent process or looking at a file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文