我需要开发一个maven插件,它可以启动apache ftp-server,将其作为守护进程运行(不会暂停构建过程)并将其作为另一个目标停止。不幸的是我第一次尝试与守护线程失败:守护程序线程阻止JVM终止 - 可能的原因?
public class FtpServerDaemon
{
public static void main(final String[] args) throws Exception
{
Thread thread = new Thread(new Runnable()
{
@Override public void run()
{
org.apache.ftpserver.main.Daemon.main(args);
}
});
thread.setDaemon(true);
thread.start();
Thread.sleep(10000);
}
}
糟糕这里的事情是,JVM不会在10秒后结束,但它无限期地运行。如果Daemon.main
是黑盒代码(但源代码为available),那么可以防止JVM在守护程序线程中终止?
我的头顶上,我怀疑FTP服务器正在自己的线程。 – chrylis
您可以采用线程转储来查看非守护程序线程是否处于活动状态 - 可能是'Daemon.main'的代码中的'server.start()'产生的...... – assylias
守护程序线程不会阻止关机根据定义,你有一个线程,它是一个仍在运行的非守护进程。尝试使用'jstack {pid}'来查看哪些线程仍在运行 –