linux0.11init进程及shell原理分析

本文详细分析了 Linux 0.11 版本中 init 进程如何启动 /bin/sh 产生 shell,并探讨了不同交互方式的影响。shell 作为用户与内核交互的接口,执行诸如 /etc/rc 的脚本,通过内建命令如 cd 和 echo 提高效率。实验表明,"-" 参数的使用决定了 shell 是否以交互方式运行,影响用户界面的交互体验。
摘要由CSDN通过智能技术生成

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是非交互的(参数前面没有"-"符号),也就是说它只是作为一个命令程序来
	//运行/
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值