为什么这种简单的JNA使用会导致Mac OS X上出现fork()



以下是JNA库在Java中创建硬链接的简单用法:

import com.sun.jna.Library;
import com.sun.jna.Native;
import java.io.File;
import java.io.IOException;
public final class HardLink {
    private static final LibC LIBC = (LibC)Native.loadLibrary("c", LibC.class);
    private HardLink() {
    }
    public static void link(File src, File dest) throws IOException {
        if (LIBC.link(src.toString(), dest.toString()) != 0)
            throw new IOException(LIBC.strerror(Native.getLastError()));
    }
    public static void main(String[] args) throws Exception {
        System.out.println("Attempting to hardlink " + args[0] + " -> " + args[1]);
        HardLink.link(new File(args[0]), new File(args[1]));
    }
    private interface LibC extends Library {
        int link(String from, String to);
        String strerror(int errno);
    }
}

当这个程序在Mac OS X 10.7.4(Lion)上使用JNA 3.4.0运行时,它确实可以工作,但出于某种原因,它正在执行fork()-我这么说是因为它会导致Java图标弹出(出现)在任务栏中,命令栏中的"HardLink"作为程序名。

我的问题是:为什么JNA要做fork()?这个程序有什么问题吗?

注意:我对从Java硬链接文件的其他方式不感兴趣。这只是一个例子。

JNA加载一些AWT类,除非您正在无头运行。是AWT相关类(包括Swing)的加载导致java进程出现在OSX Dock中。

使用-Djava.awt.headless=true运行您的程序。这将防止它出现在OSX dock中。

最新更新