扫码阅读
手机扫码阅读
kill 进程时遇到的一件有意思的事情
![](/theme/default/default/images/main/eye-open.png)
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
![](/theme/default/default/images/main/icon-link.png)
![](/theme/default/default/images/main/icon-jing.png)
咸鱼运维杂谈
扫码关注公众号
案例现象
结束进程时,通常有两种方法:使用进程的pid号执行kill命令,或者使用进程名执行pkill命令。pkill命令结合pgrep使用,可以根据UID和用户名终止进程。作者分享了一个使用pkill命令未能杀死进程的有趣案例,进程名为after_sleep60s_output,在Cent OS7上运行,使用pkill后进程仍存在。
定位问题
查阅man pkill发现,pkill默认与pgrep一起使用,后者通过检索/proc/[pid]/stat文件的进程名来查找目标进程。但该文件中的进程名长度限制为15个字符。Linux中进程的struct_task_struct结构体指定了可执行文件名的最大长度为15个字符。进程after_sleep60s_output的名字在stat文件中被截断成after_sleep60s_。若要正确使用pkill命令,应使用-f参数,它会指导pkill检索/proc/[pid]/cmdline文件中的完整启动命令。
解决问题
要准确结束进程,可采取以下方法:使用pidof命令获取PID后使用kill命令,对于使用systemd启动的进程,通过systemctl命令控制,或者在使用pkill命令时加上-f参数。文末提供了相关issue的链接以供参考。
作者鼓励读者点赞支持,称这是其写作的最大动力。
想要了解更多内容?
![](/theme/default/default/images/main/icon-link.png)
![](/theme/default/default/images/main/icon-jing.png)
咸鱼运维杂谈
扫码关注公众号
咸鱼运维杂谈的其他文章
加入社区微信群
与行业大咖零距离交流学习
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)
软件研发质量管理体系建设
白皮书上线