包含 JVM 的线程不会在线程死亡时终止 JVM
本文关键字:线程 JVM 终止 包含 | 更新日期: 2023-09-27 17:55:15
我用C#编写了一个小程序,它将集成到巡航控制中(编辑:哎呀,按回车太早了),在他们自己的单独线程中创建某些(而不是预定义的)JVM。但是,当终止线程时,JVM仍然存在并且不会卸载。此功能适用于.bat文件,但如果它们调用 JVM,它仍然保持打开状态!
每个线程都是从此类的一个实例创建的,并调用 Run()
_Critical由主进程用于测试原因。
class BatThread
{
private string _args, _fileName;
private bool _critical;
public ManualResetEvent Flag;
public BatThread(string fileName, string args, bool critical)
{
_fileName = fileName;
_args = args;
_critical = critical;
Flag = new ManualResetEvent(false);
}
public void Run()
{
using (Process Proc = new Process())
{
Proc.StartInfo.FileName = _fileName;
Proc.StartInfo.Arguments = _args;
Proc.StartInfo.RedirectStandardError = false;
Proc.StartInfo.RedirectStandardInput = false;
Proc.StartInfo.RedirectStandardOutput = false;
Proc.StartInfo.UseShellExecute = true;
Proc.Start();
while (true)
{
if (Proc.WaitForExit(100))
{
break;
}
else if (this.Flag.WaitOne(100))
{
Proc.Kill();
break;
}
Thread.Sleep(5000);
}
this.Flag.Set();
}
}
public bool critical { get { return _critical; } }
}
它不起作用,因为终止线程不会自动终止您生成的进程(独立)。通常,终止线程是一种不好的做法。您应该向线程发出退出信号,以便它可以执行清理(拆除进程),并干净地返回。