2016-10-06 1 views
0

Я исхожу из очень C и абсолютно не знаком с Java. То, что я хочу сделать что-то вроде fork() C. Я посмотрел на ProcessBuilder, но все примеры, кажется, нерестятся внешний процесс, как в следующем примере:Создайте дочерний процесс и запустите его функцией или классом

Process p = new ProcessBuilder("/bin/chmod", "777", path).start(); 
p.waitFor(); 

Я хочу, чтобы новый дочерний процесс, чтобы начать исполняющим новая функция или метод класса.

То, что я хочу сделать, должны вести что-то вроде:

Process p = new ProcessBuilder(<CLASS_METHOD>).start(); 
p.waitFor(); 

родительский процесс выполняет следующую строку (строку, содержащую waitFor()), где, как дочерний процесс начинает выполнение данного <CLASS_METHOD>.

Как это сделать?

Дополнительный вопрос: Есть ли способ получить обработчик до SIGCHLD? Я хочу создать новый дочерний процесс, когда один из дочерних процессов умирает.

+0

Просмотрите нити или API параллелизма Java. –

+0

@RobbyCornelissen Мне не нужны потоки. Я хочу отдельные процессы. –

+0

Возможный родственный вопрос: http://stackoverflow.com/questions/26319804/adapting-c-fork-code-to-a-java-program –

ответ

1

Почему вы не можете создать новый процесс java с помощью построителя процессов? Что-то вроде следующего.

Process p = new ProcessBuilder("/bin/java /tmp/Main.class").start(); 
p.waitFor(); 

Если вы не хотите жестко кодировать путь к классу, вы можете сделать следующее, чтобы получить путь.

String path = Main.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 
+0

Мой вопрос: я не хочу запускать команды через строку. Я хочу, чтобы элемент управления перешел к функции или блоку кода для дочернего процесса. –

+0

Здесь мы используем потоки. –

+0

FTR: Upvoted. Кажется, нет другого решения, кроме как с помощью команды. Благодарю. –