java.lang.illegalargumentexception:vm或os已使用的信号

holgip5t  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(367)

我正在使用一些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:失败
术语:成功

yeotifhr

yeotifhr1#

好吧,结果是google上所有的信号链接文档都不起作用,但是将jdk更改为oracleopenjdk15.0.1起了作用。

相关问题