扫码阅读
手机扫码阅读

kill 进程时遇到的一件有意思的事情

66 2024-07-20

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:kill 进程时遇到的一件有意思的事情
文章来源:
咸鱼运维杂谈
扫码关注公众号

案例现象

结束进程时,通常有两种方法:使用进程的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的链接以供参考。

作者鼓励读者点赞支持,称这是其写作的最大动力。

想要了解更多内容?

查看原文:kill 进程时遇到的一件有意思的事情
文章来源:
咸鱼运维杂谈
扫码关注公众号