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;
}
程序运行结果:
进程:系统下用户管理事物的基本单元,每个进程有自己独立的运行空间。
管理每个进程的资源的结构体: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;
}
程序运行结果:
相关文章推荐
- Linux第六周学习总结——进程额管理和进程的创建
- Linux和Windows下的进程管理总结
- linux设备驱动归纳总结(四):1.进程管理的相关概念
- linux网络属性管理总结
- Linux总结之工作管理和进程管理
- Linux学习内容总结2017/11/19(linux文本编辑器及基本进程管理)
- Linux进程管理(3):总结
- UNIX环境高级编程——进程管理和通信(总结)
- 【Linux开发】linux设备驱动归纳总结(四):1.进程管理的相关概念
- Linux学习内容总结2017/11/19(linux文本编辑器及基本进程管理)
- Linux进程管理(3):总结
- Linux第六周学习总结——进程额管理和进程的创建
- Linux下搭建PHP开发环境,Php-Fpm进程管理。
- Linux进程常用项总结(进程管理函数、命令行批量kill)
- Linux学习总结05——进程环境
- 【归纳总结】Unix/linux下的进程管理(二):创建进程的函数及其应用、对比
- Linux基础之查看进程管理常用命令总结
- Linux运维笔记-文档总结-Linux中的进程管理
- Linux进程管理(3):总结
- linux设备驱动归纳总结(四):1.进程管理的相关概念