Запустите два процесса и верните первый процесс на передний план, чтобы его можно было убить с помощью ctrl-c

Я запускаю два процесса в bash-скрипте:

run_webserver

xdg-open http: // $ (имя хоста) / dev-environment

run_webserver - это непрерывный процесс, поэтому мне нужно иметь возможность убить его с помощью ctrl-c. Команда xdg-open просто запускает страницу в браузере. Если я разделю эти команды с помощью амперсанда (& amp;), второй процесс отнимает «фокус» у первого, и я больше не могу убить его с помощью ctrl + c ... вместо этого я должен найти его в ps и запустить [ 111]. Есть идеи?

0
задан 6 August 2012 в 20:45

3 ответа

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

#!/bin/bash

trap 'kill $!' EXIT
run_webserver &
xdg-open "http://$HOSTNAME/dev-environment"
wait

В качестве альтернативы вместо этого запустите другую команду в фоновом режиме

#!/bin/bash

xdg-open "http://$HOSTNAME/dev-environment" &
run_webserver

См. Также http://mywiki.wooledge.org/ProcessManagement

0
ответ дан 6 August 2012 в 20:45

& amp; Ampersand отправляет процесс в фоновый режим. Это означает, что если вы запустите «run_webserver & amp;» тогда этот процесс будет выполняться в фоновом режиме.

Вы можете вывести этот процесс на передний план, посмотрев на идентификатор задания для процесса в терминале.

Действия по выводу процесса на первый план и уничтожению

  1. заданий: -> эта команда выведет список всех процессов, запущенных на терминале.

  2. fg: -> эта команда выведет процесс на передний план.

Затем вы можете использовать Ctrl-C, чтобы убить процесс, или любую другую последовательность, которая убивает процесс.

Пожалуйста, найдите прикрепленные снимки экрана: -

enter image description here

Pressing q helped me quit the process

0
ответ дан 6 August 2012 в 20:45

fg вернет самый последний процесс на передний план. fg - вернет предпоследний процесс на передний план.

Кроме того, вы должны использовать kill -9 только в крайнем случае, после того, как все остальное не удалось, потому что SIGKILL (-9) не разрешает программе выполнять очистку перед выходом. Сначала просто отправьте kill, что эквивалентно kill -TERM. Если после некоторого ожидания произойдет сбой, отправьте SIGHUP: kill -HUP. Только после сбоя этих сигналов вы можете попробовать SIGKILL.

0
ответ дан 6 August 2012 в 20:45

Другие вопросы по тегам:

Похожие вопросы: