2008-11-13 5 views
50

Có thể thực hiện "ngã ba" như trong java, sử dụng quy trình jvm độc lập mới không?Java - C-Like Fork?

Làm cách nào?

+1

Có thể bạn có thể đi vào chi tiết hơn về những gì bạn đang cố gắng hoàn thành? Như đã đề cập, bạn có thể exec() một tiến trình khác, có thể là một cá thể khác của JVM, nhưng điều đó không cho bạn cùng trạng thái chia sẻ như fork() trong C. Mặt khác, bạn có thể chạy các luồng, nhưng ở đó bạn nhận được nhiều chia sẻ hơn bạn sẽ với fork(). –

+0

Tôi chỉ muốn tránh chia sẻ chuỗi đó. Thks cho mối quan tâm của bạn :) – sakana

Trả lời

10

Funnily, tôi chỉ làm việc về điều này: một quá trình Java chạy các quy trình Java khác. Tôi đã sử dụng bài viết From Runtime.exec() to ProcessBuilder làm cơ sở vững chắc và When Runtime.exec() won't làm lời khuyên tốt về cách gobble luồng đầu ra. Đối với những người tự hỏi, tôi đã phải làm điều đó (thay vì sinh ra các chủ đề mới) bởi vì một quá trình Java khác đang kiểm tra sự hiện diện của các tiến trình này, thông thường, được chạy riêng với các lệnh shell.

+2

Những người chỉ đề cập đến 'Runtime.exec()', đó là WAY khác nhau từ việc có thể kiểm soát một cách rõ ràng các con sau khi một 'fork()'. – ShiDoiSi

+0

Bạn có thể vui lòng cập nhật câu trả lời và sửa liên kết cho ProcessBuilder không? –

12

Câu trả lời này có lẽ là hơi muộn nhưng:

http://akuma.kohsuke.org/

vẻ là chính xác những gì bạn đang tìm kiếm

+0

có vẻ như nó không thực sự ngã ba nhưng quá trình con mới của exec trong một cách mang lại một số lợi ích như ngã ba. – rogerdpack

+3

Lưu ý rằng nó chỉ hoạt động trên hệ thống giống như POSIX (gần như mọi thứ trừ Windows) – CharlesB

+0

Bạn có thể đọc mã nguồn của Akuma và sử dụng API posix sử dụng JNA như akuma. – Arnaud

3

Các Application Isolation API (JSR 121) giới thiệu Isolate đó đề cập đến trường hợp sử dụng này.

+1

Theo như tôi thấy, API cách ly không được hỗ trợ theo JDK hiện tại (1.8). Có một thử nghiệm MVM (Multitasking Virtual Machine) dự án nào, nhưng nó đã không tìm thấy con đường của nó trong đường chính. Hơn nữa có vẻ như với tôi rằng API cách ly không cho phép làm một ngã ba, nơi mà trạng thái của quá trình forking được nhân bản trong đứa trẻ: Theo như tôi có thể hiểu được cô lập bắt đầu với một phương pháp chính, và (tất nhiên) các chủng phân lập khác nhau không chia sẻ trạng thái. –