Chinaunix首页 | 论坛 | 博客
  • 博客访问: 207216
  • 博文数量: 38
  • 博客积分: 2060
  • 博客等级: 大尉
  • 技术积分: 388
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-17 10:10
文章分类

全部博文(38)

文章存档

2011年(1)

2009年(37)

我的朋友

分类: LINUX

2009-07-30 19:59:35

一、终端登陆过程
1、系统自举时,内核创建进程ID 1,也就是init进程。init是系统进入多用户状态。
2、对每个允许登陆的终端设备,init调用一次fork,它所生成的子进程则执行程序getty。
3、getty对终端设备调用open函数,以读,写方式将终端打开。
4、当用户输入用户名以后,getty就算结束了,然后它调用login程序。
5、login验证密码,如果错误则退出,此时init检测到子进程结束,就继续调用fork,从新登陆。如果登陆正确,就更改起始目录,终端所有权,初始化环境变量。
6、最后login改变为登陆用户的用户ID,并调用该用户的登陆shell.
二、进程关系
1、pid,ppid,pgid,sid,tpgid的区别与联系
pid:进程ID,每一个进程都有一个非负整形的唯一ID.
ppid:父进程的ID.
pgid:进程组ID
sid:会话ID.
tpgid:前台进程组ID.
2、进程组,会话,控制终端,作业控制
进程组是若干个进程的集合。setpgid的两个参数一样时则会产生一个新的进程组。一次登陆形成一个会话,通常,如果可能的话,还会打开一个控制终端。一个会话含有多个进程组,如果该会话有一个控制终端,那么它包括一个前台进程组和若干个后台进程组。只有非进程组组长的进程才能创建一个新的会话。作业等价于进程组,作业控制是指控制哪一个作业可以存取控制终端,以及那些程序在后台运行。相应的命令为fg, bg,具体参看man手册。
3、创建一个新的会话
进程调用setsid以创建一个新的会话,调用进程不能为组长进程,创建一个新会话以后:
  • 次进程变为该新会话的会话首进程(session leader),此进程是新会话中的唯一进程。
  • 此进程成为一个新进程组的组长进程。新进程组ID是此调用进程的进程ID.
  • 此进程没有控制终端。

 

阅读(1168) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~