linux – 识别内核线程
我想知道如何区分一个内核线程和一个用户线程,用于正在构建的进程扫描器.我很难找到两种类型的良好定义.
我发现内核线程没有自己的内存,所以/ proc / $pid / status中没有Vm *值,并且/ proc / $pid / exe上的stat不返回任何东西. 所以,我想我可以识别内核线程,如果进程没有Vm *值,没有索引节点号.我错了…我的脚本看到php-cgi进程有时被识别为内核进程. 如果发现大多数这些错误识别的进程是一秒钟后就会消失的僵尸.所以我实施了一个简单的检查,看看状态是否为“Z”.如果是这样,忽略它. 任何人都可以告诉我如何区分一个内核线程和用户线程正确的方式? 解决方法
内核线程和用户空间线程之间有一些明显的区别:
> / proc / $pid / cmdline对于内核线程是空的 – 这是ps和top用来区分内核线程的方法. 更具体地说, 因此,检查内核线程的可靠方法应该是调用/ proc / $pid / exe上的readlink(),并检查其返回码.如果成功,那么$pid是一个用户进程.如果与ENOENT失败,则/ proc / $pid / exe上的额外的stat()应该从刚刚终止的进程中分离出内核线程的情况.> / proc / $pid / status缺少大多数内核线程的几个字段 – 更具体地说是与虚拟内存相关的几个字段. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |