Chinaunix首页 | 论坛 | 博客
  • 博客访问: 354466
  • 博文数量: 83
  • 博客积分: 5322
  • 博客等级: 中校
  • 技术积分: 1057
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-11 11:27
个人简介

爱生活,爱阅读

文章分类

全部博文(83)

文章存档

2015年(1)

2013年(1)

2012年(80)

2011年(1)

分类:

2012-04-13 17:24:11

      Linux 启动成功后,init进程调用fork,并通过execle 执行login。
      login收集用户名与密码(getpwnam,getpass),并将加密后密码与/etc/shadow文件中对应用户名密码对比。
如果不匹配,则init继续fork 新进程执行login;如果匹配,则更改用户当前的用户起始目录,用chown更改终端的权限。同时设置用户的组id(setgid)。此时login 已经获取/etc/passwd中关于用户的名称,起始目录,shell等信息(login的有效用户id为0,即超级用户)。然后login进程调用fork新进程,并通过execlp执行用户shell,至此用户的登陆终端环境已经建立起来:



    上图系直接通过终端登陆的进程关系。这里主要是注意进程间关系以及进程sid tty pgid tpgid uid等参数值。
    下图为登陆过程(APUE2):



     通过telnet 等网络协议登陆后的进程关系如下:    

    下图为telnet登陆的进程fork过程(APUE2):


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

上一篇:Linux I/O buffer

下一篇:清理灰尘

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