关闭处理窗口但不终止进程

bvjveswy  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(273)

我目前正在使用java编写一个带有命令行界面的图像处理程序。我决定使用processing java作为其库来处理这些图像。我编写了一个类来查看主类调用的加载图像。但是,当我关闭窗口示例时,主进程也将终止。如何在不终止整个程序的情况下关闭窗口示例?

public static void showVolumes(List<CT_Volume> volumes) {
        String[] appletArgs = { "ImageViewer" };
        ImageViewer instance = new ImageViewer(volumes);
        runSketch(appletArgs, instance);
    }

这个静态方法由主类调用,主类是显示cli界面并与用户交互的驱动程序。这个 CT_Volume 是一个对象,用于封装正在使用的一组图像的信息,它包含 PImage 以便图像查看器可以显示图像。当用户想要查看加载到内存中的图像时,可以调用此静态方法。我希望在窗口示例终止后保留名为this static方法的主进程。

bbmckpt7

bbmckpt71#

这可能与java进程如何处理从终端发送的终止信号有关。终端关闭时,向与其相关的所有进程发送sighup信号。
在尝试将终端从进程中分段时,通常有两个选项。您可以使用 disown 命令,或者您可以尝试通过使用 nohup 指挥部。
我认为是发送到jvm进程的sighup信号导致了您的问题。请参见gnu页面上的sighup:https://www.gnu.org/software/libc/manual/html_node/termination-signals.html
要否认已启动的流程,我建议使用techadmin提供的教程(非常简单)https://tecadmin.net/close-terminal-without-killing-running-processes-on-linux/
总结如下:

kill -STOP <PID OF PROCESS>
 bg
 jobs -l         # To find the job ID of the process (Optional)
 disown -h %1    # Where 1 specifies the first running process
                 # (Or you can specify the JOB ID)

第二种选择可能是使用 nohup 命令以启动该命令。 nohup 将忽略发送到进程的sighup信号。

nohup java -jar yourJar.jar &

哪里 nohup 将sighup信号发送到进程时忽略该信号,并且 & 在后台运行进程以启动。
注意:这个答案是从linux的Angular 写的,重点是终端如何启动和管理进程。我还没有使用java处理库,但我希望这个答案能够为解决方案提供一些见解。

相关问题