| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Unix 如何杀死一个进程和它的子孙进程? -> 正文阅读 |
|
[系统运维]Unix 如何杀死一个进程和它的子孙进程? |
遇到的问题最近遇到一个特别有意思的问题,就是使用 背景简而言之,就是我们的热加载组件会运行命令,然后会监听文件变化,一旦文件变化就会 kill 掉之前进程,然后重新编译代码,再执行运行的命令。 但是遇到一个用户提了这样一个问题: https://github.com/cosmtrek/air/issues/216#issuecomment-982348931 在执行命令的时候使用 排查问题通过
而且是很清晰的能看出来,进程的祖孙关系: 75277 是父进程 75280 是子进程 75281 是孙进程 如果你只是采用
可以发现只剩下 75281 这个进程了,而且这个进程的父进程现在变成了 1, 孤儿进程了。属实是孤儿了。 如果这个进程还继续占用着端口,会造成下次执行命令的时候无法正常热加载。 解决方案查阅了各种资料之后,找到了一个很好的解决方案: 使用 pgid 参数来让进程组的进程共享一个进程组号。
可以看到第三列就是对应的 pgid, 虽然我们使用命令启动的 pgid 不同,但是我们可以使用 Golang 来设置进程组号,这样就可以共享进程组号了。 同时在 kill 进程的时候,也要使用这个 pgid 参数,这样就可以杀死对应的进程组了。可以参考
就是对于 pid 的代表的是 PGID 也就是整个进程组,kill 的时候会将整个进程组中的进程杀死。 虽然在上面的命令中是没办法共享进程的,但是对于这个 bug 来说,我们可以使用
pgid, err := syscall.Getpgid(cmd.Process.Pid) cmd.Wait() 总结在单测中添加相关的单测,保证 参考资料
推荐环节最后最后和大家分享一些最近在看的好文,想过用周刊的方式发送但是因为看的比较零散,就放在每篇博文的最后,希望大家能够收获!
LastMod 2022-01-24 (92e9596) |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 7:34:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |