微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SIGSTOP和SIGTSTP会损坏JVM吗?

在Linux中有两个不同的信号可以用来暂停进程, SIGSTOP和SIGTSTP 。 两者都不由HotSpot虚拟机处理,因为SIGSTOP不能被捕获,而SIGTSTP 因为不被HotSpot处理 。 我想知道发送这两个信号是否安全,或者在不安全的情况下, JVM的哪个部分会受到影响(比如垃圾收集器)。 请注意,我并不关心在JVM上运行的程序可能存在的问题,我特别关心JVM的内部。 将STOP / TSTP发送到JVM是否安全?

捕捉信号:使用成员函数作为信号处理程序

C ++,linux,fork,execvp,waitpid和SIGTSP

试图在Linux上closures睡眠

Boost.asio和UNIX信号处理

什么是Unix的信号?

SIGSTOP和SIGTSTP不包含在HotSpot JVM的信号处理中并不意味着HotSpot JVM不支持它们。

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

那些没有特别处理的,他们将表现认的方式 。 因此,当HotSpot收到SIGSTOP和SIGTSTP ,它将表现为认的方式,这意味着暂停终端暂停

事实上, SIGSTOP不能被忽略。 从信号(7)的手册页 :

信号SIGKILL和SIGSTOP不能被捕获,阻塞或忽略。

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

#include<stdio.h> #include<unistd.h> int main() { while(1) { printf("Hello Worldn"); usleep(900000); } return 0; }

没有信号处理SIGSTOP或SIGTSTP ,但是仍然可以将它们发送到这个简单的程序,它们的行为是正确的。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐