<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://www.mywiki.cn/Hovercool/index.php?action=history&amp;feed=atom&amp;title=%E6%A0%B9%E6%8D%AEPID%E8%8E%B7%E5%8F%96%E8%BF%9B%E7%A8%8B%E7%8A%B6%E6%80%81</id>
	<title>根据PID获取进程状态 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://www.mywiki.cn/Hovercool/index.php?action=history&amp;feed=atom&amp;title=%E6%A0%B9%E6%8D%AEPID%E8%8E%B7%E5%8F%96%E8%BF%9B%E7%A8%8B%E7%8A%B6%E6%80%81"/>
	<link rel="alternate" type="text/html" href="https://www.mywiki.cn/Hovercool/index.php?title=%E6%A0%B9%E6%8D%AEPID%E8%8E%B7%E5%8F%96%E8%BF%9B%E7%A8%8B%E7%8A%B6%E6%80%81&amp;action=history"/>
	<updated>2026-09-01T05:44:40Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://www.mywiki.cn/Hovercool/index.php?title=%E6%A0%B9%E6%8D%AEPID%E8%8E%B7%E5%8F%96%E8%BF%9B%E7%A8%8B%E7%8A%B6%E6%80%81&amp;diff=807&amp;oldid=prev</id>
		<title>2015年5月6日 (三) 08:32 Hovercool</title>
		<link rel="alternate" type="text/html" href="https://www.mywiki.cn/Hovercool/index.php?title=%E6%A0%B9%E6%8D%AEPID%E8%8E%B7%E5%8F%96%E8%BF%9B%E7%A8%8B%E7%8A%B6%E6%80%81&amp;diff=807&amp;oldid=prev"/>
		<updated>2015-05-06T08:32:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre class=&amp;quot;prettyprint&amp;quot;&amp;gt;&lt;br /&gt;
#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include&amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include&amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include&amp;lt;sys/time.h&amp;gt;&lt;br /&gt;
#include&amp;lt;sys/resource.h&amp;gt;&lt;br /&gt;
#include&amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include&amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;
#include&amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;utils/Log.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;dirent.h&amp;gt;&lt;br /&gt;
#include &amp;lt;ctype.h&amp;gt; &lt;br /&gt;
&lt;br /&gt;
char getStatForPid(int pid)&lt;br /&gt;
{&lt;br /&gt;
    #define MAX_FILE_LEN (256)&lt;br /&gt;
    #define READ_BYTE (256)&lt;br /&gt;
    &lt;br /&gt;
    char filePath[MAX_FILE_LEN] = {0};&lt;br /&gt;
    sprintf(filePath, &amp;quot;/proc/%d/stat&amp;quot;, pid);&lt;br /&gt;
    int fd = open(filePath, O_RDONLY);&lt;br /&gt;
    if (fd &amp;lt; 0) {&lt;br /&gt;
        LOGE(&amp;quot;vivo_daemon, Unable to open process file: %s\n&amp;quot;, filePath);&lt;br /&gt;
        return &amp;#039;E&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    char buffer[READ_BYTE];&lt;br /&gt;
    const int len = read(fd, buffer, sizeof(buffer)-1);&lt;br /&gt;
    close(fd);&lt;br /&gt;
&lt;br /&gt;
    if (len &amp;lt; 0) {&lt;br /&gt;
        LOGE(&amp;quot;vivo_daemon, Unable to open process file: %s fd=%d\n&amp;quot;, filePath, fd);&lt;br /&gt;
        return &amp;#039;E&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
    buffer[len] = 0; //buffer:304 (system_server) S 126 126 0 0 -1 4194624 ...&lt;br /&gt;
    //LOGD(&amp;quot;vivo_daemon, buffer:%s&amp;quot;, buffer);&lt;br /&gt;
&lt;br /&gt;
    //now to parse out pidstat&lt;br /&gt;
    int spaceNum = 0;&lt;br /&gt;
    char pidStat = &amp;#039;E&amp;#039;;&lt;br /&gt;
    for(int i = 0; i &amp;lt; READ_BYTE; i++) {&lt;br /&gt;
        if(&amp;#039; &amp;#039; == buffer[i]) {&lt;br /&gt;
            spaceNum++;&lt;br /&gt;
            if(2 == spaceNum) {&lt;br /&gt;
                pidStat = buffer[i+1];&lt;br /&gt;
                break;&lt;br /&gt;
            } else if(2 &amp;lt; spaceNum) {&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    //LOGD(&amp;quot;vivo_daemon, pidStat:%c&amp;quot;, pidStat);&lt;br /&gt;
    return pidStat;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
原理非常简单，就是读取 /proc/[pid]/stat文件，然后从中解析出进程的状态。&lt;br /&gt;
&lt;br /&gt;
有这个需求，主要是用来监视某一关键进程的状态，当其一旦长时间处于&amp;quot;T&amp;quot;时，则可发CONT消息，让其恢复&amp;quot;S&amp;quot;状态，这样便可使系统更多一重保护。（至于必要性的确有待商榷，毕竟是一个很不符合设计思想的亡羊补牢而已！）&lt;/div&gt;</summary>
		<author><name>Hovercool</name></author>
	</entry>
</feed>