Изящно остановить .net инициировал Java-процесс - PullRequest
1 голос
/ 02 октября 2009

Имея следующий код .net, я хочу правильно его остановить, чтобы jvm выполнил его ShutdownHooks.

System.Diagnostics.Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.WorkingDirectory = @"C:\test\";
p.StartInfo.FileName = @"C:\Program Files\Java\jre6u16\bin\java.exe";
p.StartInfo.Arguments = "-jar TheExecutable.jar";

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

Спасибо!

1 Ответ

2 голосов
/ 02 октября 2009

Если у вас есть контроль над кодом Java, вы можете обнаружить довольно нормальную ситуацию, такую ​​как End-Of-File в stdin, или так называемую ядовитую таблетку в stdin, и использовать ее для решения (в Java ) что сейчас самое время выйти.

Затем, чтобы убить процесс Java, сделайте все необходимое для его stdin.

Другой вариант - написать обработчик сигнала - see sun.misc.SignalHandler и зарегистрировать его с помощью sum.misc.Signal

Другие параметры выглядят довольно отвратительно - например, опрос родительского процесса или просмотр файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...