Chinaunix首页 | 论坛 | 博客
  • 博客访问: 107282
  • 博文数量: 31
  • 博客积分: 2292
  • 博客等级: 大尉
  • 技术积分: 310
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-17 23:41
文章分类

全部博文(31)

文章存档

2011年(2)

2010年(29)

分类: LINUX

2010-05-27 21:00:20

第二章 进程管理
进程和文件是Unix系统最基本的两个抽象
进程:执行期的程序以及它包含的资源的统称
程序:存储在某种介质中的代码。
线程:进程中活动的对象

进程
创建fork()----退出执行exit(),退出后为僵死态,直至父进程调用wait
()或waitpid()为止
PID
pid_t类型
可以通过修改/proc/sys/kernel/pid_max来提高上限
进程状态:
#define TASK_RUNNING  0
#define TASK_INTERRUPTIBLE 1
#define TASK_UNINTERRUPTIBLE 2
#define __TASK_STOPPED  4
#define __TASK_TRACED  8
/* in tsk->exit_state */
#define EXIT_ZOMBIE  16
#define EXIT_DEAD  32
/* in tsk->state again */
#define TASK_DEAD  64
#define TASK_WAKEKILL  128
#define TASK_WAKING  256
#define TASK_STATE_MAX  512

设置进程状态:
set_current_state(state);
进程上下文:
一般程序在用户空间执行,若有系统调用,进入上下文中(内核空间),此时
current有效。
每个进程必有一个父进程
所有的进程都是init(pid=1)的后代
一个进程可有多个子进程
 
 
 
 
进程的创建:
分两步
1、通过fork()复制当前进程创建一个子进程
2、exec()负责读取可执行文件并载入地址空间运行
 

写时拷贝:
上述第一步中不立即就拷贝,等到执行写操作时再拷贝,此前一直与父进程只
读方式共享
 
线程在linux中的实现:
内核中并没有线程的概念,它是一种进程间共享资源的手段
创建线程:
在调用clone()的时候传递一些参数标志指明要共享资源
内核线程:
内核在后台执行的一些操作

进程的终结:
do_exit()执行后,进程处于僵死态,还要系统调用wait4()来彻底终结进程

关于孤儿进程:
如果父进程先于子进程退出
1、在当前线程组中寻找一个作为父亲,不行,让init收留他
 
相关例子
2、内核模块用于打印进程信息
 

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/sched.h>

int task_init( void )
{
     /* Set up the anchor point */
     struct task_struct *task ;
     /* Walk through the task list, until we hit the init_task again */
     for_each_process(task)

{

         printk( KERN_INFO "*** %s [%d] parent %s\n",
                            task->comm, task->pid, task->parent->comm );
         printk( KERN_INFO "*** Current task is %s [%d]\n",
                            current->comm, current->pid);

             }

return 0;

}

void cleanup_task( void )
{
     printk(KERN_ALERT"Cleanup task!\n");
}
module_init(task_init);
module_exit(cleanup_task);


阅读(1298) | 评论(0) | 转发(0) |
0

上一篇:lkd读书笔记1

下一篇:debian--keeping on

给主人留下些什么吧!~~