2016-09-22 4 views
3

У меня есть программа, которую я хочу начать. Давайте скажем это программа будет работать какое-то время (правда) -loop (так что не обрывается я хочу написать Баш скрипт, который:.Bash: начать и убить дочерний процесс

  1. запускает программу (./endlessloop &)
  2. Уэйтс 1 второй (sleep 1)
  3. Убивает программы -!.> Как

Я не могу использовать $, чтобы получить PID от ребенка, потому что сервер работает много экземпляров одновременно

+1

Какой код вы пробовали и как он вам подвел? – CAB

+1

Я попробовал две вещи в скобках выше. Проблема в том, как убить endlessloop? –

ответ

0

Вы можете использовать р Команда Grep для того же:

kill $(pgrep endlessloop) 
+0

Используйте 'pkill' и назовите его днем! – heemayl

+2

Это будет убивать * every * endlessloop, а не только тот, который вы начали. Он также уничтожит 'endlessloopctl' или' read-endlessloop-logs'. –

+0

Я не могу ждать секунду здесь? –

2

Хранить PID:

./endlessloop & endlessloop_pid=$! 
sleep 1 
kill "$endlessloop_pid" 

Вы также можете проверить, является ли этот процесс все еще работает с kill -0:

if kill -0 "$endlessloop_pid"; then 
    echo "Endlessloop is still running" 
fi 

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

endlessloop_pids=()      # initialize an empty array to store PIDs 
./endlessloop & endlessloop_pids+=("$!") # start one in background and store its PID 
./endlessloop & endlessloop_pids+=("$!") # start another and store its PID also 
kill "${endlessloop_pids[@]}"    # kill both endlessloop instances started above 

Смотрите также BashFAQ #68, «Как запустить команду, и он прервать (тайм-аут) после N секунд?»

ProcessManagement страница на вики Wooledge также обсуждает соответствующие лучшие практики.

+0

Но я не хочу убивать все бесконечные процессы-процессы, только один начался ... –

+0

@ 今天 春天, этот ответ делает это. '$ endlessloop_pid' хранит PID только того, который был запущен, или в случае массива' endlessloop_pids', из двух запущенных. –

+0

Дело в том, что я не могу отличить, какой из них является правильным, чтобы убить. –