Ошибка разрешения при попытке доступа к (серверной) программе, запущенной Java-программой - PullRequest
0 голосов
/ 26 апреля 2010

Я запускаю серверное приложение (обычно запускаемое из командной строки Unix) с помощью Runtime.getRuntime (). Exec ("path / mmserver"). Моя проблема сейчас в том, что, пока моя Java-программа, которая запустила этот сервер, работает, сервер правильно доступен (из командной строки и других программ). Но когда моя Java-программа завершает работу, сервер перестает быть доступным (процесс на сервере все еще выполняется). Я просто получаю сообщение об ошибке при попытке получить доступ к серверу: «Ошибка: error_error (flush_output (user_output), write, stream, user_output, errno (32))». Сервер для меня черный ящик.

Я просто ищу другие способы начать новый процесс. И, возможно, у кого-то есть подсказка, почему я получаю эту ошибку разрешения (даже если кто-то не знает, что это за сервер на самом деле ... вы, скорее всего, этого не узнаете).

1 Ответ

0 голосов
/ 26 апреля 2010

Я предполагаю, что ваша серверная программа пытается записать в стандартный вывод или, возможно, в стандартную ошибку (System.out / System.err в терминах Java), которая неявно унаследована от вашей программы Java, но которая превращается в тыкву, когда ваша программа Javaуходит.

Простое решение может быть для вашей Java-программы exec сценарий оболочки, который запускает ваш сервер в качестве фонового процесса (с использованием START (Windows) или & (Unix)) сявно перенаправленные потоки ввода / вывода.

Библиотека Java недавно получила несколько хороших обновлений класса Process (я думаю), которые позволяют вам много работать с потоками, но я неу меня большой опыт, поэтому я не могу предложить подробное предложение.


РЕДАКТИРОВАТЬ: мое предложение из среднего абзаца.Не тестировал, извините!

Файл server-runner.sh:

#!/bin/bash
/path/mmserver >/dev/null &

Вам, конечно, потребуется chmod +x server-runner.sh.

Затем из вашей программы Java выexec скрипт server-runner.sh вместо вашего mmserver.

Если вы хотите убить mmserver, вам нужно будет найти его в ps -ux и использовать kill в номере процесса.

...