首页 / LINUX / 检测Linux上的pid是否是僵尸
检测Linux上的pid是否是僵尸
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了检测Linux上的pid是否是僵尸,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1264字,纯文字阅读大概需要2分钟。
内容图文
我们可以通过shell命令行检测某些是否是一个僵尸进程
ps ef -o pid,stat | grep <pid> | grep Z
要在我们的C/C++程序中获取该信息,我们使用popen(),但我们希望避免使用popen().有没有办法在不产生额外流程的情况下获得相同的结果?
我们使用的是Linux 2.6.32-279.5.2.el6.x86_64.
解决方法:
您需要使用proc(5)文件系统.访问其中的文件(例如/ proc / 1234 / stat …)非常快(它不涉及任何物理I / O).
你可能想要/ proc / 1234 / stat中的第三个字段(每个人都可以读取,但是你应该按顺序读取它,因为它是不可见的.).如果该字段是Z,那么pid 1234的过程是僵尸.
无需分叉进程(例如withpopen或system),在C中你可能编写代码
pid_t somepid;
// put the process pid you are interested in into somepid
bool iszombie = false;
// open the /proc/*/stat file
char pbuf[32];
snprintf(pbuf, sizeof(pbuf), "/proc/%d/stat", (int) somepid);
FILE* fpstat = fopen(pbuf, "r");
if (!fpstat) { perror(pbuf); exit(EXIT_FAILURE); };
{
int rpid =0; char rcmd[32]; char rstatc = 0;
fscanf(fpstat, "%d %30s %c", &rpid, rcmd, &rstatc);
iszombie = rstatc == 'Z';
}
fclose(fpstat);
还要考虑procps和libproc,请参阅this answer.
(您还可以阅读/ proc / 1234 / status的第二行,但这可能更难以在C或C代码中解析)
顺便说一下,我发现/ proc /中的stat文件有一种奇怪的格式:如果你的可执行文件恰好在其名称中包含空格和括号(这很恶心,但允许),解析/ proc / * / stat文件变得棘手.
内容总结
以上是互联网集市为您收集整理的检测Linux上的pid是否是僵尸全部内容,希望文章能够帮你解决检测Linux上的pid是否是僵尸所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。