我正在使用一些java来处理“urg”信号,如下所示: Signal.handle(new Signal("URG"), handler)
然而,我不断收到 java.lang.IllegalArgumentException: Signal already used by VM or OS: SIGURG
在我的 macOs Catalina 10.15.5
具有开放jdk版本的系统: 12.0.1.j9-adpt
jvm。
我用一个调试器一步一步地检查了代码,我没有看到这个信号被提前添加,google显示了0个结果。
好的,我用scala做了一个最小的复制品:
import sun.misc.{Signal, SignalHandler}
object Main extends App {
Signal.handle(new Signal("URG"), URGHandler.handle)
println("hello")
}
object URGHandler extends SignalHandler {
override def handle(sig: Signal): Unit = {
print("received signal")
}
}
Exception in thread "main" java.lang.IllegalArgumentException: Signal already used by VM or OS: SIGURG
at java.base/jdk.internal.misc.Signal.handle(Signal.java:173)
以下是运行intellij以运行程序的命令:
~/.sdkman/candidates/java/12.0.1.j9-adpt/bin/java \
-javaagent:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=53899:/Applications/IntelliJ IDEA CE.app/Contents/bin \
-Dfile.encoding=UTF-8 \
-classpath /Users/userperson/IdeaProjects/urg/target/scala-2.13/classes:/Users/userperson/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.4/scala-library-2.13.4. jar \
Main
以及java中的最小复制:
import sun.misc.Signal;
import sun.misc.SignalHandler;
public class Main {
public static void main(String[] args) {
Signal.handle(new Signal("URG"), new URGHandler());
}
}
class URGHandler implements SignalHandler {
@Override
public void handle(Signal sig) {
System.out.println("hello signal");
}
}
我尝试过的其他信号:
urg:失败
usr1:失败
usr2:失败
术语:成功
1条答案
按热度按时间yeotifhr1#
好吧,结果是google上所有的信号链接文档都不起作用,但是将jdk更改为oracleopenjdk15.0.1起了作用。