Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SIGSTOP和SIGTSTP会损坏JVM吗?_Java_Linux_Jvm_Signals_Jvm Hotspot - Fatal编程技术网

Java SIGSTOP和SIGTSTP会损坏JVM吗?

Java SIGSTOP和SIGTSTP会损坏JVM吗?,java,linux,jvm,signals,jvm-hotspot,Java,Linux,Jvm,Signals,Jvm Hotspot,在Linux中,有两种不同的信号可用于暂停进程,即SIGSTOP和SIGTSTP。这两个都不由热点虚拟机处理,因为无法捕获SIGSTOP和SIGTSTP。我想知道发送这两个信号是否安全,或者如果不安全,JVM的哪个部分会受到影响(例如垃圾收集器)。请注意,我不关心JVM上运行的程序可能存在的问题,我特别感兴趣的是JVM的内部结构。向JVM发送STOP/TSTP安全吗?SIGSTOP和SIGTSTP不包括在HotSpot JVM中并不意味着HotSpot JVM不支持它们 这只意味着对这两个信号没

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

SIGSTOP
SIGTSTP
不包括在HotSpot JVM中并不意味着HotSpot JVM不支持它们

这只意味着对这两个信号没有特殊处理。一些信号(
SIGSEGV
SIGTERM
等)由HotSpot JVM专门处理以实现(隐式空检查、关闭挂钩等)

未经特殊处理的,其行为将采用默认方式。因此,当热点接收到
SIGSTOP
SIGTSTP
时,它将以默认方式运行,这意味着暂停终端暂停

事实上,
SIGSTOP
不能被忽略。来自信号(7)的:

无法捕获、阻止或忽略信号
SIGKILL
SIGSTOP

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

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

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

  return 0;
}
#包括
#包括
int main()
{
而(1)
{
printf(“Hello World\n”);
美国LEEP(900000);
}
返回0;
}
对于
SIGSTOP
SIGTSTP
,没有信号处理,但是您仍然可以将它们发送到这个简单的程序,它们将正常工作

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


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

如果
SIGTSTP
可能损坏它,老实说,这将是一个严重的错误;我在终端上挂起Java命令行程序从来没有遇到过任何问题,所以我认为
SIGTSTP
根本不是问题。