2014-03-11 2 views
2

Чтобы автоматизировать задачи системного администрирования, я записал следующую строку коды оболочки:Как запустить pkill при вызове оболочки для выполнения команды?

bash -c 'pkill -TERM -f java; true' 

Проблема заключается в том, что pkill убивает Баш сразу после pkill выполнения команды, и поэтому последующие команды не имеют шансов выполнить.

Помимо разделения их на две линии:

bash -c 'pkill -TERM -f java' 
bash -c 'true' 

Есть ли другой обходной путь?

+1

Невозможно воспроизвести: 'sleep 60 & bash -c 'pkill -TERM -f sleep; echo true'' убивает 'sleep', но все же печатает« true »для терминала. Трюк, иногда используемый с 'grep', может помочь, хотя:' bash -c 'pkill -TERM -f \ java; true''. – chepner

+0

@chepner проблема не может быть воспроизведена в osx, вы должны иметь возможность воспроизвести ее в linux. –

ответ

2

Если вы хотите, чтобы убить все процессы Java, просто отклоняют -f:

bash -c 'pkill -TERM java; true' 

Если вы действительно также хотите, чтобы убить не-Java-процессы, как mplayer "jungle_gremlins_of_java.avi", типичный «решение» переписать команду так что рисунок не соответствует самому себе:

bash -c 'pkill -TERM -f "[j]ava"; true' 
Смежные вопросы