2012-01-24 3 views
0

Для webapp, который я разрабатываю, у меня есть сценарий bash, чтобы следить за изменениями в источнике и обновлять текущую среду.Запуск и уничтожение серверов и наблюдателей из сценария bash

function app-serve { 
    python runserver.py 
} 

function compile-coffee { 
    inotifywait -e modity scripts | while read change; do 
     coffee -o js scripts 
    done 
} 

Теперь мне нужно эти две функции выполняются одновременно,

app-serve & 
compile-coffee & 

И ждать тоже

wait 

Проблема в том, когда я хочу, чтобы остановить эти процессы, простой Ctrl-C не делает этого. Когда я делаю Ctrl-C, я возвращаю командный запрос, но процессы, выполняемые в функциях, все еще живы.

Есть ли способ сказать bash просто подождать, пока я не удалю Ctrl-C, а затем убейте все подпроцессы?

Edit: Одно уточнение, я вижу python процесс я начинаю в app-serve функции является убит. Только inotifywait и несколько процессов bash свисают.

ответ

1

Вы можете поймать сигнал ctrl-c в своем сценарии bash и выполнить функцию, которая обнаруживает процессы и убивает их.

См http://hacktux.com/bash/control/c

Наверное что-то вроде killall приложение-сервер и killall компиляции кофе.

Не забудьте выйти из сценария bash с вызовом для выхода.

+0

Ницца. Спасибо за информацию о ловушке. Но я хотел бы найти pids и убить их, а не 'killall'. Кроме того, когда я даю имя функции 'killall', он говорит' app-server: no process found'. –

+0

Также см. Мои изменения кода в вопросе. –

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