从Java启动一个子进程,它不会';t在UNIX上继承文件/端口
这个问题和我搜索的类似 然而,在我的例子中,我想从Java启动一个子进程,它不会从父进程(JVM)继承文件/端口。这在Java中可能吗?有解决办法吗 从我收集到的信息来看,Java似乎没有提供一种使用close-on-exec标志(FD_-CLOEXEC)标记文件描述符的方法,这与C不同。任何见解都将不胜感激从Java启动一个子进程,它不会';t在UNIX上继承文件/端口,java,ports,inheritance,Java,Ports,Inheritance,这个问题和我搜索的类似 然而,在我的例子中,我想从Java启动一个子进程,它不会从父进程(JVM)继承文件/端口。这在Java中可能吗?有解决办法吗 从我收集到的信息来看,Java似乎没有提供一种使用close-on-exec标志(FD_-CLOEXEC)标记文件描述符的方法,这与C不同。任何见解都将不胜感激 谢谢 在Java中打开的任何文件都会自动标记为FD_CLOEXEC。如果在strace中运行JVM,您将看到与FileInputStream相对应的输出。open调用: 5926 ope
谢谢 在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源代码,我相信您会在
open
之后立即找到一个fcntl
调用,您使用的是哪个平台?启动子进程时继承句柄的语义在Windows和POSIX之间有很大不同。Java和JVM的可能重复都没有描述继承文件句柄的任何语义(因为行为依赖于系统)。因此,当您删除问题的Java部分时,它与您链接到的类似部分相同。有关更多信息,请参见。