Запустите дочерний процесс из Java, который не наследует файлы / порты в UNIX - PullRequest
2 голосов
/ 25 января 2012

Этот вопрос похож на на этот , который я искал.

Однако в моем случае я хотел запустить подпроцесс из Java, где он не наследовал бы файлы /порты от родительского процесса (JVM).Возможно ли это вообще на Java?Какие-нибудь обходные пути?

из того, что я собрал, кажется, что Java не предоставляет способ пометить файловые дескрипторы флагом закрытия на exec (FD_CLOEXEC), в отличие от C. Любая идея будет принята с благодарностью.

Спасибо!

1 Ответ

2 голосов
/ 10 февраля 2012

Любые файлы, которые вы открываете в Java, автоматически помечаются как FD_CLOEXEC. Если вы запустите JVM в strace, вы увидите этот вывод, соответствующий вызову 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.

...