关闭终端应该终止与终端的关联进程

时间:2017-01-05 13:54:17

标签: linux shell scripting debian deb

我打包了我们软件的Debian文件。现在需要启动.sh脚本来运行程序/软件。这个.sh脚本实际上运行了Django服务器和更多服务。

要实际启动此应用程序,我们需要在菜单中运行.desktop文件。菜单中的.desktop文件与上面提到的.sh脚本相关联。这会提示终端并要求输入密码。一旦给出密码,这将启动服务并且终端保持活动状态。

要完全关闭此服务,我们需要通过查找进程的PID并从终端终止它来终止进程。但现在我想在关闭终端时杀死这个过程。

我该怎么做?

2 个答案:

答案 0 :(得分: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

然后您可以使用以下方式启动/停止服务(以root用户身份):

 systemctl start myservice

RESP。

 systemctl stop myservice

您可以拥有服务的依赖关系链,因此从myservice开始会自动启动myhelper1myhelper2

查看联系人页面systemd.unit.5

答案 1 :(得分:0)

当控制终端关闭时,前台进程组应该收到SIGHUP信号。如果您的目标进程已经预期在前台,则可能是它正在捕获或忽略SIGHUP(接收该信号的进程的默认行为将终止)。