где будет создаваться файл nohup.out при выполнении сценария оболочки Java Runtime?

#java #linux #unix #runtime #nohup

#java #linux #unix #время выполнения #nohup

Вопрос:

когда я выполняю сценарий оболочки через java Runtime.exec (), где я могу найти файл nohup.out.

String command = «nohup ksh /home/xyz/script.ksh amp;»;

Время выполнения rtime=Runtime.getRuntime();

rtime.exec (команда);

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

1. "amp;" не будет работать. Этот символ понятен только оболочкам, и даже если вы выполняете оболочку, вы не выполняете свою команду в оболочке при использовании Runtime.exec. Хорошая новость в том, что вам это не нужно "amp;" ; процесс уже запущен в фоновом режиме, даже без этого символа.

2. то есть вы хотите сказать, что Runtime.exec () не генерирует nohup.out и не перенаправляет nohup.out в какой-либо файл?

Ответ №1:

nohup выходные данные записываются в файл только в том случае, если он подключен к терминалу. Этого не будет при вызове его через exec , поэтому выходные данные будут записаны в стандартный вывод подпроцесса (который вы можете получить через getInputStream ). Нигде не nohup.out будет создан.

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

1. попробуйте { String command = «nohup ksh /home/xyz/script.ksh amp;»; ProcessBuilder pb = новый ProcessBuilder(команда); конечный процесс p=pb.start(); BufferedReader br=новый BufferedReader(новый InputStreamReader(p.getInputStream())); Строковая строка; while((строка=br.readLine())!=null){ System.out.println(строка); } } catch (исключение ex) { System.out.println(пример); }

2. Строковая команда = «nohup ksh /home/xyz/script.ksh amp;»; ProcessBuilder builder = новый ProcessBuilder(strCommand); builder.redirectOutput(новый файл(«/home/heena/Desktop/megha/redirectoutput.log»)); builder.redirectError(новый файл («/home/heena/Desktop/megha /redirectoutput.log «)); Процесс p = builder.start();

3. Среда выполнения runtime = Runtime.getRuntime(); Process process = runtime.exec(аргументы); InputStream is = process.getInputStream(); InputStreamReader isr = новый InputStreamReader(is); BufferedReader br = новый BufferedReader(isr); Строка строки; System.out.printf(«Вывод запущенного %s равен:», Arrays.toString(аргументы )); while ((строка = br.readLine()) != null) { System.out.println(строка); }