gpt4 book ai didi

java - SIGSTOP 和 SIGTSTP 会损坏 JVM 吗?

转载 作者:太空狗 更新时间:2023-10-29 11:04:54 25 4
gpt4 key购买 nike

在 Linux 中有两种不同的信号可用于暂停进程,SIGSTOPSIGTSTP。两者均未由 HotSpot 虚拟机 处理,SIGSTOP 因为无法捕获和SIGTSTP because is not handled by HotSpot .我想知道发送这两个信号是否安全,或者如果不安全,JVM 的哪一部分会受到影响(例如垃圾收集器)。请注意,我不关心在 JVM 上运行的程序可能遇到的问题,我特别感兴趣的是 JVM 的内部结构。向 JVM 发送 STOP/TSTP 是否安全?

最佳答案

SIGSTOPSIGTSTP 不包含在 HotSpot JVM 的 signal handling 中并不意味着 HotSpot JVM 不支持它们。

这仅表示对这两个信号没有特殊处理。一些信号(SIGSEGVSIGTERM 等)由 HotSpot JVM 专门处理以实现 certain features (隐式空检查、关闭 Hook 等)。

那些没有特别处理的,他们会表现默认方式。因此,当 HotSpot 接收到 SIGSTOPSIGTSTP 时,它将按照默认方式运行,即PauseTerminal Pause .

其实SIGSTOP是不能忽略的。来自 signal(7) 的 man page :

The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.

我们可以通过一个简单的 C 程序来证明这一点:

#include<stdio.h>
#include<unistd.h>

int main()
{
while(1)
{
printf("Hello World\n");
usleep(900000);
}

return 0;
}

SIGSTOPSIGTSTP 没有任何信号处理,但您仍然可以将它们发送到这个简单的程序,它们将正常运行。

按 Ctrl+Z 将发送一个 SIGTSTP 信号,运行 kill -19 pid 将发送一个 SIGSTOP 信号。演示程序将暂停。

在这两种情况下,运行 kill -18 pid 将发送 SIGCONT 信号并使我们的演示程序恢复执行。

关于java - SIGSTOP 和 SIGTSTP 会损坏 JVM 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17453055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com