不涉及具体代码
之前学习Linux系统编程的时候学习过用C语言编写简单的shell,今天看到用Python实现shell,就想借此机会复习操作系统中shell相关的知识。
什么是shell?
(1)shell是一个系统软件,负责用户和操作系统内核之间的交互,是产生进程的进程(通过linux系统调用fork,exec),主要负责解释用户的命令,进而实现用户对进程的控制。
(2)shell也是一门脚本语言,拥有流程控制,变量,运算等,主要适用于Linux下的配置和运维。
(3)shell命令的本质是放在/bin目录下的可执行程序,管道和重定向操作则是终端的三个标准文件描述符对可执行文件进行操作,从而实现的(具体略)。
(4)信号是事件驱动编程的核心,也是通过shell对进程进行控制的一个重要方式。
(5)具有环境变量,即有用户,版本,当前目录之类的信息,用于访问控制。
(6)一个shell形成一个进程会话,其中的进程有前台后台之分。
本次实验中Python实现的shell是什么样的?
(1)具有控制进程的功能。
(2)支持简单的内置命令。
(3)不支持脚本语言功能,不支持管道和重定向操作。
与Python相关的学习要点
(1)Python os,sys模块
实现过程中用了封装了Linux系统调用的Python函数,比如:
目录相关
os.getcwd()
os.chdir()
路径相关
os.path.basename()
os.path.expanduser()
标准输出文件描述符
sys.stdout.write
sys.stdout.flush()
获取环境变量
os.getenv
(2)Python signal模块
忽略信号
signal.signal(signal.SIGTSTP, signal.SIG_IGN)
(3)Python 字符串处理
shelx.split//分解参数
.startswith//判断字符开头
(4)subprocess
相当于系统调用fork,exec
总结
(1)本次实验主要表现了Python在系统编程的能力,通过os,sys等模块我们可以实现一个不错的shell系统软件。
(2)改进方向:添加管道,重定向操作,&后台调度操作等。
(3)对刚入门的同学要完全理解比较困难,需要去补充系统编程的知识。
(4)可以用面向对象,把shell抽象为类进行重构