#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(строка); }