首页 文章

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

提问于
浏览
0

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

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

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

我怎样才能做到这一点?

2 回答

  • 0

    如果您正在尝试创建服务(某些程序在后台运行),您应该创建使用系统的机制 . 传统的一个,将是 /etc/init.d/ 中的一个脚本,更现代的方法是使用 systemd .

    例如 . 一个文件 /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

  • 0

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

相关问题