Приостановить и продолжить процесс Java

Я ищу решение, способное сделать это на Java:

  • Создать процесс.
  • Приостановите его (как это делает kill -STOP в Linux).
  • Продолжить приостановленный процесс (например, kill -CONT в Linux).
  • Чтение / запись их стандартных каналов ввода / вывода во время выполнения.
  • Работаю (как минимум) на Linux и Windows.

Насколько мне известно, стандарт Java реализует только первый и четвертый, но не второй и третий.

Что я мог сделать?


person lilezek    schedule 02.10.2013    source источник
comment
Вы недостаточно знаете. Вы можете использовать _1 _ / _ 2_. Вы можете использовать пакет java.util.concurrent.   -  person Boris the Spider    schedule 02.10.2013
comment
Кроме того, вы можете выполнять команды оболочки в java, с помощью которых вы можете легко достичь 2 и 3. Может быть, есть и другие способы.   -  person Ragavan    schedule 02.10.2013
comment
Это решение применимо к потокам. Это тоже работает для процесса?   -  person lilezek    schedule 02.10.2013


Ответы (1)


Нет возможности делать "напрямую" из Java.

Вам нужно будет сделать что-то особенное для Windows / Linux, в каждом случае выполняя внешнюю программу или вызывая собственный код.

В Linux вы можете использовать kill, как вы предлагаете.

В Windows вы можете вызвать SuspendThread() или запустить инструмент SysInternals «PsSuspend». Здесь есть некоторая информация, которая может вам помочь:

Как приостановить / возобновить любой внешний процесс под Windows?

Как приостановить / возобновить процесс в Windows?

Если вы хотите вызвать собственный код из Java, JNIWrapper может вам помочь.

Кроме того, если вам нужны PID порожденных процессов, вам может потребоваться запустить их также через собственный код, поскольку Java не будет предоставлять вам их PID.

person wool.in.silver    schedule 02.10.2013
comment
Итак, нельзя ли использовать wait / notify, как предложил Паук Борис? - person lilezek; 02.10.2013
comment
Нет, ожидание / уведомление используются для управления потоками в вашей программе Java, тогда как вы хотите управлять внешними процессами. - person wool.in.silver; 03.10.2013
comment
JNIWrapper, похоже, не бесплатное ПО. Есть ли другое решение, включающее только бесплатную технологию? - person lilezek; 03.10.2013
comment
Напишите собственный код Windows самостоятельно, т. Е. Используйте версию Visual C ++ Express для создания библиотеки DLL. Выполняйте вызовы из вашей Java-программы в эту DLL, используя необработанный JNI. - person wool.in.silver; 03.10.2013