unix – 将进程的生命周期与启动它的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,然后上面的技巧就可以了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 调试Angular代码的Batarang插件不能用的问题
- [译] $digest 在 Angular 中重生
- 我的第一个bootstrap页面
- 如何使用angular-cli和webpack在angular2应用程序中导入xml
- Angular2组件与指令的小实践——实现一个图片轮播组件
- Scala将Iterable或collection.Seq转换为collection.immutab
- 如何在angularJS中检测上传的文件类型
- Scala – 作家Monad是否与国家Monad有效地相同?
- Bash:“printf%q $str”在脚本中删除空格. (备择方案?)
- Mirantis使用Kubernetes容器化OpenStack以缓解运维挑战