static char * argv_rc[] = { "/bin/sh", NULL };
static char * envp_rc[] = { "HOME=/", NULL };
static char * argv[] = { "-/bin/sh",NULL };
static char * envp[] = { "HOME=/usr/root", NULL };
void init(void)
{
int pid,i;
setup((void *) &drive_info);
(void) open("/dev/tty0",O_RDWR,0);
(void) dup(0);
(void) dup(0);
printf("%d buffers = %d bytes buffer space\n\r",NR_BUFFERS,
NR_BUFFERS*BLOCK_SIZE);
printf("Free mem: %d bytes\n\r",memory_end-main_memory_start);
//fork将创建一个子进程(pid=2),注意if括弧里面执行是子进程的内容。
//首先子进程关闭句柄0,然后以只读方式打开/etc/rc文件,接着调用execve函数
//将进程自身替换成/bin/sh程序,然后执行/bin/sh程序。
//注意:argv_rc和envp_rc分是/bin/sh程序的参数和环境变量。
//ps:关闭句柄0,打开/etc/rc文件的作用是把标准输入stdin重定向到/etc/rc文件中,
//这样shell程序/bin/sh就可以运行rc文件中的命令。
//由于这里的sh是非交互的(参数前面没有"-"符号),也就是说它只是作为一个命令程序来
//运行/
linux0.11init进程及shell原理分析
最新推荐文章于 2024-07-29 19:14:01 发布
本文详细分析了 Linux 0.11 版本中 init 进程如何启动 /bin/sh 产生 shell,并探讨了不同交互方式的影响。shell 作为用户与内核交互的接口,执行诸如 /etc/rc 的脚本,通过内建命令如 cd 和 echo 提高效率。实验表明,"-" 参数的使用决定了 shell 是否以交互方式运行,影响用户界面的交互体验。
摘要由CSDN通过智能技术生成