在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信号,并将演示程序恢复执行。
总结以上是内存溢出为你收集整理的SIGSTOP和SIGTSTP会损坏JVM吗?全部内容,希望文章能够帮你解决SIGSTOP和SIGTSTP会损坏JVM吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)