2017-01-05 18 views
0

Я упаковал файл Debian нашего программного обеспечения. Теперь есть сценарий .sh, который необходимо запустить для запуска программы/программного обеспечения. Этот скрипт .sh фактически запускает сервер Django и несколько других сервисов.Закрытие терминала должно убить связанный процесс с помощью терминала

Чтобы запустить это приложение, нам необходимо запустить файл .desktop в меню. Файл .desktop в меню ассоциирован с указанным выше скриптом .sh. Это запрашивает терминал и запрашивает пароль. Как только пароль будет указан, это запустит службы, и терминал останется активным.

Чтобы полностью закрыть эту службу, нам нужно убить процесс, находя PID процесса и убивая его с терминала. Но теперь я хочу убить этот процесс, когда я закрываю терминал.

Как я могу это сделать?

+0

Возможный дубликат [Лучший способ убить все дочерние процессы] (http://stackoverflow.com/questions/392022/best-way-to-kill-all-child-processes) – CPHPython

+0

Вы запускаете свои серверы из иконка рабочего стола? я бы выбрал 'systemd.unit' для одного (нескольких) правильных способов запуска демона. –

ответ

0

Если вы пытаетесь создать службу (какая-то программа, которая работает в фоновом режиме), вы должны создать для этого механизм вашей системы. Традиционный, был бы сценарием в /etc/init.d/, более современный подход - использовать systemd.

E.g. файл /etc/systemd/system/myservice.system

[Unit] 
Description=My Service 

[Service] 
Type=simple 

# you could run the service as a special user 
#User=specialuser 
WorkingDirectory=/var/lib/myservice/ 
# execute this before starting the actual script 
#ExecStartPre=/usr/lib/myservice/bin/prestart.sh 
ExecStart=/usr/bin/myservice 
Restart=on-failure 

[Install] 
WantedBy=multi-user.target 

Вы можете запустить/остановить службу (как корень) с помощью:

systemctl start myservice 

соотв.

systemctl stop myservice 

Вы можете иметь цепи зависимостей услуг, поэтому начиная myservice автоматически начнет myhelper1 и myhelper2.

заказ страница руководства systemd.unit.5

0

Когда управляющий терминал закрыт, на переднем плане группы процессов должны получить SIGHUP сигнал. Если ожидается, что ваш целевой процесс будет находиться на переднем плане, может оказаться, что он ловит или игнорирует SIGHUP (поведение по умолчанию для процесса, получающего этот сигнал, прекращается).

+0

спасибо за ответ –

+0

@ спасибо за ответ, я действительно не дал никакого пути к моему пакету установки deb, поэтому все мои основные файлы и файлы программного обеспечения находились в корневой папке, а скрипт запуска приложения также был в корне, так что это например, когда программа/скрипт связана с корнем, он игнорирует sighup? Поскольку сегодня я переупаковал свое программное обеспечение в установщик deb, и я дал путь установки к/usr/share, после этого теперь, когда я установил deb снова, весь мой основной файл программного обеспечения хранится в/usr/share сейчас, когда я закрываю терминал также автоматически убивается. –

+0

№. Каталог, в котором находится бинарный файл, не влияет на обработку сигналов. –

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

  • Нет связанных вопросов^_^