爱生活,爱阅读
分类:
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):