您的位置:首页 > 运维架构 > Linux

linux 进程管理---进程环境和属性总结

2012-12-10 20:22 211 查看
1.进程资源:

进程:系统下用户管理事物的基本单元,每个进程有自己独立的运行空间。

管理每个进程的资源的结构体:struct task_struct(定义在内核头文件include/linux/sched.h)

结构体task_struct 包含的信息:线程基本信息,内存信息,tty终端信息,当前目录信息,打开文件描述符信息,信号信息以及进程属性

2.用户级进程状态:

就绪/运行状态(TASK_RUNNING):正在运行或处于就绪状态。

可被中断等待(TASK_INTERRUPTIBLE):处于等待队伍中,等待资源有效时唤醒,可被中断。

不可被中断等待(TASK_UNINTERRUPTIBLE):处于等待队伍中,等待资源有效时唤醒,但不可被中断。

僵死状态(TASK_ZOMBIE):即将从任务链表中删除,但在task中仍然有一个task_struct数据结构,等待父进程释放。

停止状态(TASK_STOPPED):进程已经结束,已经释放了相应的资源,但未释放进程控制块,可以被唤醒。

3.进程基本属性:

3.1.进程号(PID)不能修改:系统维护的唯一表示一个进程的正整数,无法在用户层修改。

调用getpid()获取当前进程的pid(getpid()在/usr/include/unistd.h中声明),若失败返回-1

实例:

#include<stdio.h>

#include<unistd.h>

int main(int argc,char *argv[])

{

        printf("the current program's pid is %d\n",getpid());

        return 0;

}

3.2父进程号(ppid),不能修改:定义如下

#include<unistd.h>

extern __pid_t getppid(void);

成功返回当前进程的父进程PID 错误返回 -1,错误原因存储在errno


应用实例:

#include<stdio.h>

#include<unistd.h>

int main(int argc,char *argv[])

{

        printf("the current program's ppid is
%d\n",getppid());

        return 0;

}

运行结果:

root@ubuntu:/home/administrator/Desktop# gcc -o test test.c

[1]+  Done                    ./test 1

root@ubuntu:/home/administrator/Desktop# ./test

the current program's ppid is 3570

3.3 进程组号(PGID),一个或多个进程的集合,定义如下:

#include<unistd.h>

extern __pid_t getpgid(__pid_t pid);

应用实例:

#include<stdio.h>

#include<unistd.h>

int main(int argc, char *argv[])

{

    int i;

    printf("\t pid\t ppid \t pgid\n");

    printf("parent\t%d\t%d\t%d\n",getpid(),getppid(),getpgid(0));

    for(i=0;i<2;i++)

        if (fork()==0) printf("child\t%d\t%d\t%d\n",getpid(),getppid(),getpgid(0));

    return 0;

}

程序运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息