首页 / LINUX / 如何在linux上同步杀死进程
如何在linux上同步杀死进程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在linux上同步杀死进程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1538字,纯文字阅读大概需要3分钟。
内容图文
![如何在linux上同步杀死进程](/upload/InfoBanner/zyjiaocheng/968/1a78c200211a4fdf93b69c65f4aba784.jpg)
当我在进程上调用kill()时,它会立即返回,因为它只是发送一个信号.我有一个代码,我在一个循环中无限地检查一些(外来的,不是由我编写或可修改的)进程,如果它们超过某些限制(太多ram吃掉等)它会杀死它们(并写入系统日志等).
问题是,当进程被大量交换时,它需要很多秒才能终止它们,因此,我的进程多次对相同进程执行相同的检查,并尝试多次向同一进程发送信号,并将其写入syslog同样. (这不是故意的,只是我试图解决的副作用)
我不关心它发送信号的次数,但我关心它写入syslog的次数.我可以保留一个已经发送了杀死信号的PID列表,但理论上,即使可能性很低,也可能会有另一个进程产生与先前被杀死的pid相同的pid,这也可能被认为是被杀死的在这种情况下,日志将丢失.
我不知道是否有任何进程的唯一标识符,但我对此表示怀疑.我怎么能同步杀死一个进程,或者跟踪获得信号的进程并且不需要再次记录?
解决方法:
即使你可以进行“同步杀戮”,你仍然有竞争条件,你可以杀死错误的进程.只要您想要杀死的进程在您看到它之后但在您杀死之前通过自己的意志或第三方操作退出,就会发生这种情况.在此间隔期间,可以将PID分配给新进程.这个问题基本上没有解决方案. PID本质上是属于所识别过程的父节点的本地资源;任何其他过程使用PID都是竞争条件.
如果您对系统有更多控制权(例如,控制要杀死的进程的父进程),则可能存在特殊情况解决方案.可能还有(特定于Linux的)解决方案基于使用/ proc中的某些机制来避免竞争,尽管我不知道任何.
另一种解决方法可能是在目标进程上使用ptrace,就像您要调试它一样.这允许您部分“窃取”父角色,避免在您仍在使用PID时使PID失效,并允许您在进程终止时收到通知.你会做类似的事情:
>检查进程信息(例如来自/ proc)以确定您要杀死它.
> ptrace it,暂时停止它.
>重新检查流程信息,确保您获得了想要杀死的流程.
>恢复跟踪过程.
>杀了它.
>等待(通过waitpid)通知进程退出.
内容总结
以上是互联网集市为您收集整理的如何在linux上同步杀死进程全部内容,希望文章能够帮你解决如何在linux上同步杀死进程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。