这个问题与我搜索的to this one类似。
但是,在我的情况下,我想从Java启动一个子进程,它不会从父进程(JVM)继承文件/端口。这在Java中是否可行?任何解决方法?
从我收集到的内容来看,似乎Java没有提供一种方法来使用关闭exec标记(FD_CLOEXEC)标记文件描述符,这与C不同。任何见解都将非常感激。
谢谢!
答案 0 :(得分:2)
您在Java中打开的所有文件都会自动标记为FD_CLOEXEC。如果您在strace
中运行JVM,您会看到此输出对应于FileInputStream.open
来电:
5926 open("file.txt", O_RDONLY|O_LARGEFILE) = 6
5926 fstat64(6, {st_mode=S_IFREG|0664, st_size=869, ...}) = 0
5926 fcntl64(6, F_GETFD) = 0
5926 fcntl64(6, F_SETFD, FD_CLOEXEC) = 0
如果您检查了OpenJDK源代码,我确信您会在fcntl
之后立即找到open
来电。