2014-12-23 10 views
0

Я пытаюсь написать сценарий, который запускает java-программу «Loop», а затем через 5 секунд завершает эту Java-программу, однако она не прерывает программу когда я использую опцию «pkill», мне жаль, что я задал такой основной вопрос, и я просмотрел интернет, но я не могу найти решение. Вот мой код:pkill -n java работает на консоли, но не в скрипте

#!/bin/bash 
javac Loop.java 
java Loop 
sleep 5 
pkill -n java 

Когда я запускаю команду pkill -n Java от терминала, в отличие от в сценарии, это, как я ожидал, почему это?

+0

Пожалуйста, попробуйте используйте заголовок, который отличает ваш вопрос от других вопросов о bash. –

ответ

2

Ваш Баш скрипт ждет java завершить так что вам нужно, чтобы запустить его в качестве фонового процесса, который начнется ваш код Loop, а затем вернуться немедленно, позволяя остальной ваш скрипт для запуска:

java Loop & 

Дополнительная информация: http://tldp.org/LDP/abs/html/x9644.html

+1

Прекрасный ответ - только каламбур у меня есть с предлагаемой ссылкой. АБС не уделяет много внимания демонстрации передового опыта в своих примерах, что делает его часто плохим выбором для начинающих. –

0

Поскольку вы запускаете java Loop на переднем плане, следующая строка sleep 5 не получает выполняется, пока ваш JVM выходы (которые, вероятно, никогда, если Loop на самом деле бесконечный цикл).

Таким образом, вы должны начать, что в фоновом режиме:

java Loop & 

Кроме того, за убийство этого конкретного фонового задания (а не убивая новейшую JVM), вы можете сделать:

kill $! 
+0

что такое $! делать? Как найти PID цикла? –

+0

Это специальный параметр bash, который «расширяет идентификатор процесса последней выполненной фоновой (асинхронной) команды»: http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters –

+0

' $! 'возвращает pid последней выполненной команды, которая в этом случае будет java-вызовом. –

Смежные вопросы