加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

unix – 将进程的生命周期与启动它的shell联系起来

发布时间:2020-12-16 01:11:47 所属栏目:安全 来源:网络整理
导读:以UNIX-y的方式,我正在尝试启动一个进程,对其进行后台处理,并将该进程的生命周期与我的 shell联系起来. 我所说的不仅仅是后台进程,我希望将进程发送到SIGTERM,或者让它有一个关闭的打开文件描述符,或者当shell退出时,以便shell的用户不必显式杀死进程或获得
以UNIX-y的方式,我正在尝试启动一个进程,对其进行后台处理,并将该进程的生命周期与我的 shell联系起来.

我所说的不仅仅是后台进程,我希望将进程发送到SIGTERM,或者让它有一个关闭的打开文件描述符,或者当shell退出时,以便shell的用户不必显式杀死进程或获得“你有正在运行的作业”警告.

最终,我想要一个程序,它可以为每个shell独特运行,并随着shell运行状态,并在shell关闭时关闭.

IBM的DB2控制台命令以这种方式工作.当您连接到数据库时,它会生成一个“db2bp”进程,该进程包含数据库状态和连接并将其绑定到您的shell.您可以在多个不同的终端或ssh连接中进行连接,每个终端都有自己的db2bp进程,当这些进程关闭时,相应的db2bp进程将终止,并且该连接将关闭.

然后使用db2命令启动DB2查询,该命令只是将其移交给相应的db2bp进程.我不知道它是如何与正确的db2bp进程通信的,但是它可能使用连接到stdin的tty设备作为唯一密钥?我想我也需要解决这个问题.

我从来没有写任何有关操作的东西,所以我不知道哪里可以开始.如果我可以生成一个在shell退出时自动终止的进程,我想我可以解决其余问题.任何人都知道DB2是如何做到的?

如果你的shell不是子shell,你可以做以下事情;将以下内容放入名为“ttywatch”的脚本中:
#!/usr/bin/perl
my $p=open(PI,"-|") || exec @ARGV; sleep 5 while(-t); kill 15,$p;

然后运行您的程序:

$ttywatch commandline... & disown

取消该进程将阻止shell抱怨正在运行的进程,并且当终端关闭时,它将导致SIGTERM(15)在5秒内被传递到子进程(您的应用程序).

如果shell不是子shell,你可以使用像ttywrap这样的程序来至少给它自己的tty,然后上面的技巧就可以了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读