小编Alf*_*654的帖子

当从 IntelliJ 运行并使用 setcap 赋予网络嗅探权限时,Java 每隔几秒输出一次完整线程转储

我正在编写一个使用 Pcap 库进行数据包嗅探的应用程序。为了实现这一点,我需要提供java二进制网络嗅探功能,以避免必须将其运行为root

sudo setcap cap_net_raw,cap_net_admin=eip /path/to/bin/java
Run Code Online (Sandbox Code Playgroud)

当我运行任何程序时,每隔几秒钟,我就会得到一个完整线程转储到stdout. 是此类完整线程转储的示例(存储库的其余部分不相关)。否则该程序似乎运行成功:除了转储之外,我找不到执行中的差异。

下面的代码足以重现该问题:

package main;

import java.io.IOException;

public class StdinTest {
    public static void main(String[] args) throws IOException {
        System.in.read();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我使用下面的命令从二进制文件中删除功能时java,事情会恢复正常,并且我不再将完整线程转储到标准输出。

sudo setcap -r /path/to/bin/java
Run Code Online (Sandbox Code Playgroud)

我不确定这是一个问题,因为程序似乎运行良好,但看起来不正常

我没有找到任何人似乎有类似的问题,我有点迷失......

感谢任何帮助,提前致谢!


细节:

  • 操作系统:在ArchLinux(内核5.12.9)和Ubuntu 20.04(内核5.8.0)上复制
  • JDK:在 Adopt OpenJDK 11、15 和 16、openjdk.java.net 15 和 16 上复制。

编辑

如果程序在命令行中运行,则无法重现:

java -classpath target/classes main.StdinTest
Run Code Online (Sandbox Code Playgroud)

我仅在从 IntelliJ Idea Ultimate 启动时才会出现症状。我还没有尝试过其他 IDE。

java linux dump intellij-idea

8
推荐指数
1
解决办法
1443
查看次数

标签 统计

dump ×1

intellij-idea ×1

java ×1

linux ×1