从Java启动子进程,该进程不在UNIX上继承文件/端口

时间:2012-01-25 03:57:51

标签: java ports inheritance

这个问题与我搜索的to this one类似。

但是,在我的情况下,我想从Java启动一个子进程,它不会从父进程(JVM)继承文件/端口。这在Java中是否可行?任何解决方法?

从我收集到的内容来看,似乎Java没有提供一种方法来使用关闭exec标记(FD_CLOEXEC)标记文件描述符,这与C不同。任何见解都将非常感激。

谢谢!

1 个答案:

答案 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来电。