Linux用户启动一个进程的通用方法是在shell中执行命令,命令中包括可执行程序的路径以及启动所需参数。新启动的进程是shell进程的子进程,shell使用wait系列函数等待用户进程的结束,在进程结束后wait函数会返回,从而shell收到通知并回收资源。本文主要说明shell如何启动用户进程,Linux系统中可执行文件格式ELF以及通过execve系统调用启动用户进程的过程。
1)内核(/unix,/vmunix,/boot/zImage等)将加载至内存,直到系统关机;
2)init将扫描/etc/inittab(inittab列出可用的终端及其属性),一旦找到活动的终端,mingetty会给出login提示符和口令,mingetty提示输入用户及口令;
3) 将用户名及口令传递给login, login验证用户及口令是否匹配,如果身份验证通过,login将会自动转到其$HOME;
4)将控制权移交到所启动的任务(在移交之前分别完成setgid,setuid)。 如在/etc/passwd文件中用户的shell为/bin/sh。
5)读取文件/etc/profile和$HOME/.profile中系统定义变量和用户定义变量,系统给出shell提示符$PROMPT,对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。
6)在shell提示符,就可以键入命令名称(或shell程序)及所需要的参数。
7)当用户准备结束登录对话进程时,可以键入logout命令、exit命令或按ctrl+d,结束后控制权将交给init。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)