Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152382
  • 博文数量: 69
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 595
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-16 00:00
个人简介

宁可逆流而上与众不同,也不顺风顺水随波逐流

文章分类

全部博文(69)

文章存档

2020年(1)

2018年(9)

2017年(43)

2016年(16)

我的朋友

分类: LINUX

2017-02-21 20:58:51

        首先init守护进程会为每个终端fork一个子进程,然后每个子进程会exec一个叫getty的程序来真侦听每个终端等待用户登录,同时getty还会为终端调用open函数,已读写方式打开终端。
        一旦收到用户请求getty会输出欢迎信息(/etc/issue中的内容)和login:以提示用户输入登录名
        用户输入完成后getty便功成身退了,子进程就再exec login程序,它会根据用户输入的用户名从口令文件中获取相应的密码并以password:形式提示用户输入,输入完毕后login程序调用crypt加密用户输入的密码并与口令文件中的密码比较,若相同则成功,否则执行exit(1),init了解到它终止后便从头开始
        登录成功后login需要做很多事情:
                更改起始目录
                当前终端所有权改为此用户 chown
                终端设备访问权限变为读和写
                设置进程的组ID setgid、initgroups
                初始化环境,也就是一些环境变量的设置
                login进程变为登录用户的用户id,并调用exexl启动用户的登录shell
                ...
        登录shell开始运行后便会取其启动文件,bash的启动文件是bash_profile、.bash_login或.profile


参考书目:UNXI环境高级编程第二版
参考链接:
阅读(423) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~