ProcessBuilder порождал поведение процесса при изменении конфигурации PB - PullRequest
0 голосов
/ 18 января 2020

Мой вопрос:

Влияет ли изменение переменных среды или рабочих каталогов ProcessBuilder на ПРЕДЫДУЩИЕ порожденные процессы? Простые тесты в Debian 9 и Windows 7 предполагают, что это не влияет на уже созданные процессы , но я хотел бы быть уверен, что это ожидаемое поведение, предпочтительно наличие какой-либо ссылки на официальные документы или некоторое объяснение о внутренностях ProcessBuilder, что делает это утверждение ненужным.

Подробности:

Я использую Process Builder в параллельной системе для порождения экземпляров одного и того же процесса с разными переменными среды и рабочими каталогами из нескольких потоков.

В настоящее время я работаю использование класса ProcessBuilderControler, который позволяет избежать типичных проблем параллелизма путем синхронизации доступа к PB, чтобы избежать проблем, подобных следующим, когда T1 и T2 пытаются порождать процесс одновременно:

  • T1 устанавливает работу dir PB со значением "/ dir" * 1 016 *
  • T2 устанавливает рабочий каталог PB со значением "/ dir2"
  • T1 выполняет запуск () PB
  • T2 выполняет запуск () PB

В этом случае процессы T1 и T2 породили бы сценарии с / dir2 в качестве рабочего каталога.

Меня беспокоило то, что МОЖЕТ БЫТЬ, если вы изменили каталог pb даже после того, как процесс порожден, процесс получит самую последнюю версию ценность. Это не имело место в windows или linux в соответствии с моими тестами, в которых я вынудил описанную ситуацию ..

1 Ответ

2 голосов
/ 18 января 2020

Нет, общее ограничение ОС состоит в том, что нельзя изменять переменные среды и рабочий каталог запущенного процесса извне процесса.

Это возможно при использовании API отладки, но это, безусловно, не то, что ProcessBuilder сделает.


В настоящее время я использую класс ProcessBuilderControler, который позволяет избежать типичных проблем параллелизма путем синхронизации доступ к PB во избежание проблем

Правильный способ избежать проблем параллелизма при использовании ProcessBuilder в классе контроллера - не использовать общий экземпляр ProcessBuilder.

На самом деле это общая рекомендация : не используйте совместно изменяемые объекты в контроллерах.

...