簡體   English   中英

java.lang.IllegalArgumentException: 信號已被 VM 或 OS 使用

[英]java.lang.IllegalArgumentException: Signal already used by VM or OS

我正在使用一些試圖處理“URG”信號的 Java,如下所示:

Signal.handle(new Signal("URG"), handler)

但是,我一直收到java.lang.IllegalArgumentException: Signal already used by VM or OS: SIGURG on my macOs Catalina 10.15.5 system with AdoptOpen JDK Version: 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:失敗
  • 術語:成功

好吧,原來 Google 上的所有 Signal Chaining 文檔都不起作用,但是將 JDK 更改為 Oracle Open JDK 15.0.1 卻起作用了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM