分类: 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:进程组IDsid:会话ID.tpgid:前台进程组ID.2、进程组,会话,控制终端,作业控制进程组是若干个进程的集合。setpgid的两个参数一样时则会产生一个新的进程组。一次登陆形成一个会话,通常,如果可能的话,还会打开一个控制终端。一个会话含有多个进程组,如果该会话有一个控制终端,那么它包括一个前台进程组和若干个后台进程组。只有非进程组组长的进程才能创建一个新的会话。作业等价于进程组,作业控制是指控制哪一个作业可以存取控制终端,以及那些程序在后台运行。相应的命令为fg, bg,具体参看man手册。3、创建一个新的会话进程调用setsid以创建一个新的会话,调用进程不能为组长进程,创建一个新会话以后:
次进程变为该新会话的会话首进程(session leader),此进程是新会话中的唯一进程。 此进程成为一个新进程组的组长进程。新进程组ID是此调用进程的进程ID. 此进程没有控制终端。