优雅地停止 .net 启动的 Java 进程
有了下一个 .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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您可以控制 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 instdin
, 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 withsum.misc.Signal
Other options seem rather hideous - like polling the parent process or looking at a file.