如何在Linux和Windows中正常停止Java进程?
什么时候Runtime.getRuntime().addShutdownHook
被调用,什么时候不被调用?
终结器又如何呢?
我可以从外壳向Java进程发送某种信号吗?
我正在寻找最好的便携式解决方案。
在所有未强制终止VM的情况下,都会执行关机挂钩。因此,如果要发出“标准” kill(SIGTERM
通过kill命令),则它们将执行。同样,它们将在调用后执行System.exit(int)
。
但是,如果将其强行杀死(kill -9或kill -SIGKILL
),它们将不会执行。同样(很明显),如果你从计算机上拔下电源,将其放入沸腾的熔岩桶中或用大锤将CPU粉碎成碎片,它们将不会执行。你可能已经知道了。
终结器确实也应该运行,但是最好不要依赖于终结器进行关闭清理,而要依靠你的关闭钩子来干净地停止运行。而且,一如既往,请小心死锁(我已经看到太多的关闭挂钩会挂起整个过程)!
问题内容: 如何在Linux和Windows中正常停止Java进程? 什么时候被调用,什么时候不被调用? 终结器又如何呢? 我可以从外壳向Java进程发送某种信号吗? 我正在寻找最好的便携式解决方案。 问题答案: 在所有未强制终止VM的情况下,都会执行关机挂钩。因此,如果要发出“标准” kill(通过kill命令),则它们将执行。同样,它们将在调用后执行。 但是强行杀死(或),然后它们将不会执行。
问题内容: 由于许多node.js脚本遵循异步执行模式(以下示例),因此它们如何知道何时停止? 在以下代码中,节点如何确定在处理writeFile和适当注册回调之后,在回调运行之前,该进程应保持活动状态? 问题答案: 节点跟踪所有未完成的工作请求。您的fs.writefile()调用为I / O创建工作请求,并将您的回调添加到该请求。节点在启动I / O活动的同时将工作请求保存到其表中。到达函数末
问题内容: 我已经用GUI制作了一个Java程序,并且想要一个停止按钮功能,其中当用户单击停止按钮时,必须停止该程序。 在我的程序中,主线程启动其他10个线程,我希望每当单击“停止”按钮时,所有10个线程都必须在主线程之前停止。 其次,我还希望每当停止这10个线程中的任何一个线程时,它都必须先关闭它打开的所有资源,然后再连接数据库等。 我已经实现了.......回答的代码。 现在有一个问题。 我的
我正在使用ProcessBuilder启动一个外部进程,但我需要能够杀死它。现在,我没有问题杀死进程,但由于某种原因,错误流没有关闭,所以读取流的线程永远不会完成。这让我无法关闭我的程序。 从这里开始线程读取输入和错误流。 这是我用来停止该进程的代码。 我从来没有得到“error end”,调试程序显示线程只是位于“readline()”。 等待进程的代码在它自己的线程中运行(与终止进程的代码分开
问题内容: 我写了一个线程,它花费太多时间执行,而且似乎还没有完全完成。我想优雅地停止线程。有什么帮助吗? 问题答案: 做到这一点的好方法是让一个线程保护一个Thread的变量,并在你要停止它的时候将其设置为外部变量,例如: `class MyThread extends Thread { volatile boolean finished = false; public void stopMe(
问题内容: 该程序在九次打印后完成: 如何停止进程(例如eclipse中的Java进程),因为它在9秒的时间限制后没有停止? 问题答案: 您遇到的问题是,取消哔声任务后,调度程序会保留活动线程。 如果存在活动的非守护程序线程,则JVM保持活动状态。 它使该线程保持不变的原因是您已在此行中告诉它这样做: 请注意以下文档: -即使在空闲状态下要保留在池中的线程数。 因此,您有两种可能的方法来导致J