Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 关闭终端应终止与终端关联的进程_Linux_Shell_Scripting_Debian_Deb - Fatal编程技术网

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

Linux 关闭终端应终止与终端关联的进程,linux,shell,scripting,debian,deb,Linux,Shell,Scripting,Debian,Deb,我已经打包了我们软件的Debian文件。现在需要启动一个.sh脚本来运行程序/软件。这个.sh脚本实际上运行一个Django服务器和一些其他服务 要真正启动此应用程序,我们需要运行菜单中的.desktop文件。菜单中的.desktop文件与上述.sh脚本相关联。这将提示终端并询问密码。一旦给出密码,这将启动服务,并且终端将保持活动状态 要完全关闭此服务,我们需要通过查找进程的PID并从终端终止它来终止进程。但现在我想在关闭终端时终止这个过程 如何才能做到这一点?如果您试图创建一个服务(一些在后台

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

要真正启动此应用程序,我们需要运行菜单中的
.desktop
文件。菜单中的
.desktop
文件与上述
.sh
脚本相关联。这将提示终端并询问密码。一旦给出密码,这将启动服务,并且终端将保持活动状态

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


如何才能做到这一点?

如果您试图创建一个服务(一些在后台运行的程序),您应该使用系统的机制来创建服务。 传统的方法是在
/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用户身份):

分别

您可以拥有服务的依赖链,因此启动
myservice
将自动启动
myhelper1
myhelper2


签出手册页

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

您是否从桌面图标启动服务器?我宁愿签出
systemd.unit
来找到启动守护进程的正确方法。@paul感谢您的回答,实际上,我没有给我的deb安装包提供任何路径,因此我的所有主软件目录和文件都在根文件夹中,我的应用程序启动脚本也在根文件夹中,因此,当程序/脚本与根关联时,它是否会忽略sighup?因为今天我将我的软件重新打包到了一个deb安装程序中,我给出了安装路径为/usr/share,之后,当我再次安装deb时,我所有的主软件文件都存储在/usr/share中。现在,当我关闭终端时,过程也会自动停止否。找到二进制文件的目录对信号处理没有影响。Paul但现在出现了一个新问题,即当我试图与其他非root用户一起安装deb时,当我在deb中单击时,软件安装程序启动,然后在一段时间后,它会提示输入管理员密码,并警告“要安装此软件,您需要管理权限”但即使在正确提供密码后,软件安装程序也会自动关闭,而不安装软件。您能帮我解决这个问题吗?如果您需要询问其他问题,您应该开始一个新问题。
 systemctl start myservice
 systemctl stop myservice