Java 什么';现代linux中linux关闭/注销术语信号处理程序的时间容差是多少?

Java 什么';现代linux中linux关闭/注销术语信号处理程序的时间容差是多少?,java,linux,signals,ubuntu-11.10,Java,Linux,Signals,Ubuntu 11.10,我在我的一个java程序中看到了奇怪的行为(文件丢失、文件过时),它必须在关机时保存一些信息(使用shutdownhooks),然后使用术语信号 显而易见的解决方法是在修改信息后立即保存,但出于性能原因,我希望避免这样做 在我看来,容差值设置得非常短,init(我认为这是看门狗进程的名称)实际上在JVM终止之前杀死了它。我不认为这是我的应用程序的错误,因为我使用了一个程序,它等待了至少20秒,但仍然几乎立即终止。 您可以在关机和注销中看到这种行为,在netbeans和它打开的选项卡中也可以看到这

我在我的一个java程序中看到了奇怪的行为(文件丢失、文件过时),它必须在关机时保存一些信息(使用shutdownhooks),然后使用术语信号

显而易见的解决方法是在修改信息后立即保存,但出于性能原因,我希望避免这样做

在我看来,容差值设置得非常短,init(我认为这是看门狗进程的名称)实际上在JVM终止之前杀死了它。我不认为这是我的应用程序的错误,因为我使用了一个程序,它等待了至少20秒,但仍然几乎立即终止。 您可以在关机和注销中看到这种行为,在netbeans和它打开的选项卡中也可以看到这种行为(它不会保存它们,至少在java 7上最近的7.1中是这样)

这是我无法避免和需要解决的问题吗?

第(8)部分的文档说明,
init
进程在发送
SIGTERM
SIGKILL
信号之间等待5秒。此延迟可通过
-t
选项更改

(8)支持相同的
-t
选项,并将其中继到
telinit
。因此,如果您想在系统上全局增加延迟,则必须编辑
/etc/inittab
配置文件或
/etc/init.d
中的帮助文件,具体取决于您的发行版。

第(8)部分的文档表示
init
进程在发送
SIGTERM
SIGKILL
信号之间等待5秒。此延迟可通过
-t
选项更改


(8)支持相同的
-t
选项,并将其中继到
telinit
。因此,如果您想在您的系统上全局增加延迟,您必须编辑
/etc/inittab
配置文件或
/etc/init.d
中的帮助文件,具体取决于您的发行版。

我似乎没有inittab(Ubuntu11.10,我猜它使用的是upstart)。和/etc/init.d是一个shell脚本的汤。我认为候选的是/etc/init.d/killprocs和/etc/init.d/halt,但我似乎找不到telinit的调用。如果您的
killprocs
脚本与我的类似(我运行gentoo并使用openrc),那么在调用
killall5
之后,它应该调用
sleep
,因此,您可以尝试增加传递给第一个
sleep
命令的duration参数。。。但这绝对不会发生。这是我甚至将睡眠调用从1改为5的代码,它仍然立即结束。我似乎没有inittab(我猜是使用upstart的ubuntu 11.10)。和/etc/init.d是一个shell脚本的汤。我认为候选的是/etc/init.d/killprocs和/etc/init.d/halt,但我似乎找不到telinit的调用。如果您的
killprocs
脚本与我的类似(我运行gentoo并使用openrc),那么在调用
killall5
之后,它应该调用
sleep
,因此,您可以尝试增加传递给第一个
sleep
命令的duration参数。。。但这绝对不会发生。这是我甚至将sleep call更改为5(从1)的代码,它仍然立即结束。