Как остановить фоновый процесс, запущенный из bash после завершения следующей команды? - PullRequest
2 голосов
/ 21 июля 2011

Как мне сделать так, чтобы morbo-сервер, называемый здесь фоновым процессом, автоматически отключался / уничтожался, если я закрывал окно Firefox или каким-то образом останавливал этот скрипт?

#!/bin/bash

morbo Mojolicious_Lite.pl &

firefox -new-window http://localhost:3000/

Ответы [ 3 ]

7 голосов
/ 22 июля 2011

ОК, давайте решим это.

#!/bin/bash
morbo Mojolicious_Lite.pl & P=$!
trap "kill $P" INT # maybe you want EXIT here too?
firefox -new-window http://localhost:3000/
wait

Это должно сработать ... Когда Firefox выйдет, оболочка будет ждать оставшихся заданий (morbo), которые затем могут быть прерваны нажатием Ctrl-C - inв этом случае ловушка убивает их.

Вы можете проверить это визуально (то есть посмотреть, что выполняется) с помощью

bash -x run.sh

Предполагая, что ваш скрипт называется run.sh;)

1 голос
/ 22 июля 2011

В bash $ _ это последний аргумент предыдущей команды.Чтобы убить фоновое задание, вам нужно использовать номера заданий (или PID).Пример использования номера задания:

[15:29:29 ~]$ gvim &
[2] 28509
[15:29:31 ~]$ kill %2
[15:29:39 ~]$
[2]+  Terminated              gvim
[15:29:42 ~]$

[2] - номер задания, который отображается при запуске фонового процесса.

1 голос
/ 21 июля 2011

Переменная $_ - это PID вашего последнего фонового задания.Используйте это, чтобы убить ваш процесс.Чтобы поймать ошибки / сигналы, используйте trap (например, man bash).

...