Как отправить пароль процессу на Java

#java #io #iostream #inputstream

#java #io #iostream #входной поток

Вопрос:

Я запускаю процесс из Java, чтобы выполнить команду для меня. Этот процесс выполняется некоторое время, затем для продолжения требуется пароль. Теперь я знаю, что могу записывать в поток in процесса, но я не совсем уверен, как определить, когда мне нужно в него записать.

Возможные решения:
Есть ли способ, которым я могу определить, что процесс блокируется?
Могу ли я просто записать в стандарт сразу после выполнения команды, и когда процесс достигнет точки, когда ему это нужно, он сможет просто прочитать из нее?

Есть еще идеи?

Комментарии:

1. Это ваш код (у вас есть исходный код), или кто-то другой использует jar? Я склоняюсь к тому, что программа командной строки не должна запрашивать пароль, но если вы не писали код, у вас может не быть выбора.

2. Если это ваш код, то почему бы вам не попробовать сохранить пароль уже в файле и заставить процесс прочитать его оттуда, если это необходимо. Очевидно, что это небезопасно и т.д. Но, возможно, для того, что вам нужно, этого достаточно.

3. @bwawok Я пытаюсь выполнить runas команду в Windows. Он выполняется некоторое время, а затем запрашивает у пользователя пароль. Я не уверен точно, как получить для него пароль

Ответ №1:

Нет необходимости определять, блокируется дочерний процесс или нет. Если дочерний процесс предназначен для блокировки до тех пор, пока ему не будет предоставлен ввод через stdin, он будет блокировать до тех пор, пока такой ввод не будет предоставлен.

Необходимо иметь в виду, что стандартные размеры буфера ввода, вывода и ошибок ограничены, и поэтому дочернему процессу было бы необходимо обработать содержимое входного буфера, а родительскому процессу обработать содержимое буфера вывода и буфера ошибок как можно скорее. Невыполнение этого требования приведет к зависанию дочернего процесса.

Ответ №2:

Возможно, вам следует обойти проблему с runas, но не использовать runas. Google нашел мне это:http://www.source-code.biz/snippets/c/1.htm Позволяет передавать пароль во время выполнения….