Я запускаю два процесса в bash-скрипте:
run_webserver
xdg-open http: // $ (имя хоста) / dev-environment
blockquote >run_webserver - это непрерывный процесс, поэтому мне нужно иметь возможность убить его с помощью ctrl-c. Команда xdg-open просто запускает страницу в браузере. Если я разделю эти команды с помощью амперсанда (& amp;), второй процесс отнимает «фокус» у первого, и я больше не могу убить его с помощью ctrl + c ... вместо этого я должен найти его в
ps
и запустить [ 111]. Есть идеи?
Вы можете установить ловушку, чтобы убить фоновый процесс при выходе и дождаться фонового процесса.
#!/bin/bash
trap 'kill $!' EXIT
run_webserver &
xdg-open "http://$HOSTNAME/dev-environment"
wait
В качестве альтернативы вместо этого запустите другую команду в фоновом режиме
#!/bin/bash
xdg-open "http://$HOSTNAME/dev-environment" &
run_webserver
& amp; Ampersand отправляет процесс в фоновый режим. Это означает, что если вы запустите «run_webserver & amp;» тогда этот процесс будет выполняться в фоновом режиме.
Вы можете вывести этот процесс на передний план, посмотрев на идентификатор задания для процесса в терминале.
Действия по выводу процесса на первый план и уничтожению
заданий: -> эта команда выведет список всех процессов, запущенных на терминале.
fg: -> эта команда выведет процесс на передний план.
Затем вы можете использовать Ctrl-C, чтобы убить процесс, или любую другую последовательность, которая убивает процесс.
Пожалуйста, найдите прикрепленные снимки экрана: -
fg
вернет самый последний процесс на передний план. fg -
вернет предпоследний процесс на передний план.
Кроме того, вы должны использовать kill -9
только в крайнем случае, после того, как все остальное не удалось, потому что SIGKILL (-9) не разрешает программе выполнять очистку перед выходом. Сначала просто отправьте kill
, что эквивалентно kill -TERM
. Если после некоторого ожидания произойдет сбой, отправьте SIGHUP: kill -HUP
. Только после сбоя этих сигналов вы можете попробовать SIGKILL.