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;
}
程序运行结果: