linux进程状态小结

来源:互联网 发布:mac os x 10.7 iso 编辑:程序博客网 时间:2024/06/06 05:30

提到进程,首先想到的自然是ps.这个命令可以查看进程的状态.也会想到/proc目录.当前系统的所有进程都以文件的形式保存在这里.

首先了解一下ps命令.比较常用的一些组合.我是记不住.现用现查.


比如ps axu输出部分如下:


这里着重说一下第八个字段,进程状态:

S    sleep(睡眠)

R   run(运行)

s    session(会话组首进程)

N   优先级比较低(不知道是哪个单词)

<    高优先级进程

+    前台进程

l     多线程进程

D   不可中断的睡眠.(没见过)

T    停止,GDB调试会导致进程进入这个状态.

Z    zombie进程,死了但是还没有死利索.

W   分页(没有见过)

下面简单的通过一个小例子来看看这几个状态.

#include <unistd.h>#include <stdio.h>#include <pthread.h>#include <signal.h>#include <stdlib.h>static int selfkill = 0;void thread1(){    while (1)    {        sleep(5);        return;    }}void ding(int signo){    printf("ouch, I am late\n");    sleep(5);    selfkill = 1;    printf("selfkill %d\n", selfkill);}void child_handle(){    sleep(5);    wait(NULL);}int main(int argc, char ** argv){    nice(-20);    pthread_t tid;    pthread_create(&tid, NULL, (void*)&thread1, NULL);    signal(SIGINT, child_handle);    pid_t pid = fork();    switch (pid)    {        case -1:            perror("fork error\n");            break;        case 0:            {                signal(SIGALRM, ding);                alarm(5);                while (1)                {                    printf("I am child, selfkill %d\n", selfkill);                    sleep(5);                    if (selfkill != 0)                    {                        exit(-1);                    }                }            }            break;        default:            nice(40);            break;    }    while (1)    {        system("ps axu | grep a.out");        sleep(5);    }    return 0;}

这个小的示例首先建立一个线程,然后注册信号处理函数.捕捉ctrl+C.

建立子进程,在子进程中注册ALARM信号处理函数.实现子进程自残.打印结果如下:

没有什么新颖的内容.也没有什么独特的见解.仅仅是对所学的一个总结.当然可能总结的并不是很全面.


0 0
原创粉丝点击