unix shell(壳)的简单实现
用户程序通过调用操作系统提供的系统调用(system call)API 来获得操作系统提供的各种服务。但使用 API 需要手动编写程序。对于不编程序、且需要与操作系统进行交互的用户,又如何使用操作系统的服务呢?
为了向那些不编程的用户提供服务,操作系统提供了一个壳(shell)来与用户交互。 每个操作系统都会提供某种壳以便与用户进行交互。正如蛋壳(eggshell)之于内部的蛋清(egg white)和蛋黄(egg yolk),操作系统提供的壳(“os shell”)是覆盖在操作系统服务上面的一个用户界面(user interface),一般分为如下两种形式:
- 既可以是图形方式的(GUI, Graphical User Interface):Windows
- windows 中,启动壳需要执行 explore.exe,也即 windows 的资源管理器;
- 也可以是文本形式的:UNIX,Linux;
- 启动一个壳,只需要运行 shell 即可,可以同时启动多个壳;
用户在这个界面上输入命令,操作系统则执行这些命令。当然,用户输入的命令不是直接的操作系统服务,而是所谓的 utilities(工具)。这里 utilities 的功能相当于 C 语言中的库函数。用户无法直接调用系统调用。壳上的用户不能直接使用操作系统提供的服务。
1. 一个壳的具体功能
- 显示提示符(prompt)
- 接受用户命令并执行;
- 启动后台进程;
- 进行工作控制;
- 提供薇伪终端服务;
2. 一个简单的壳实现
while (true) {type_prompt(); // 显示命令提示符;read_command(command, parameters); // 获取用户输入的命令,及参数if (fork() == 0) { // fork 一个子进程;execute(command, parameters, 0); // 子进程代码,执行用户命令} else { // 父进程代码段waitpid(-1, &status, 0); // 等待子进程结束;}
}
转载于:https://www.cnblogs.com/mtcnn/p/9422055.html
unix shell(壳)的简单实现相关推荐
- 《Linux与unix Shell编程指南》 总结
<Linux与unix Shell编程指南> 总结 标签: linux网络dstcron服务器 2011-01-10 18:27 3742人阅读 评论(0) 收藏 举报 分类: Linux ...
- PowerShell与Unix Shell对比:八大实例
PowerShell与Unix Shell对比:八大实例 本文将从八个实例对比PowerShell和Unix Shell,通常是Linux Bourne Shell(包括sh.ksh和bash等).二 ...
- 检查在Unix Shell脚本中设置环境变量的简洁方法是什么?
我有一些Unix shell脚本,在开始做事之前,我需要检查某些环境变量是否已设置,因此我要执行以下操作: if [ -z "$STATE" ]; thenecho "N ...
- html怎么shell脚本语言,简单shell脚本例子
为什么要使用Shell脚本 使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象.缺点是:它们的效率通常不如编译型语言.不过权衡之下,通常使用脚本编程还是值 ...
- linux脚本量产,可玩性很高的量产键盘、套件 HEAVY SHELL KIRA 96简单上手
1.jpg (45.97 KB, 下载次数: 4) 可玩性很高的量产键盘.套件 HEAVY SHELL KIRA 96简单上手 2021-2-2 14:20 上传HEAVY SHELL Kira 96 ...
- Unix Shell 介绍
摘要 shell 是提供到 UNIX 操作系统的接口的一个命令编程语言.它的特征包括控制流原语.参数传递.变量和字符串替换.还可获得如 while.if then else. case 和 for 这 ...
- 【编程实践】Linux / UNIX Shell编程极简教程
不同于一般的介绍Linux Shell 的文章,本文并未花大篇幅去介绍 Shell 语法,而是以面向"对象" 的方式引入大量的实例介绍 Shell 日常操作,"对象&qu ...
- Linux/Unix shell 监控Oracle告警日志(monitor alter log file)
使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...
- shell expect的简单用法
为什么需要expect? 我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet服务器等进 ...
- unix修改ip和计算机名,UNIX shell获取IP和修改IP
UNIX shell获取IP和修改IP #!/bin/ksh #全局变量 #已配置信息的网卡个数 ETHNUM=0 #网卡名称信息,多个网卡用#符号分隔 ETHS="" #网卡IP ...
最新文章
- mybatis实体类注解_SpringBoot2.x系列教程43--整合使用Mybatis
- ABAP的子程序参数注意点
- eclise配置tomcat出现服务Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4 and Java EE 5 Web modules...
- 对话MathWorks:解读MATLAB技术生态圈与未来趋势
- 游走于天才与疯子边缘的创业“鬼才”
- DARPA 想用自动化技术制造出最强的黑客
- Windows 安装Bazel (安装过程中报远程服务器错,先记下来方法)
- apache的rewrite详解
- 深入学习java虚拟机第二版学习笔记
- 数学模型——人口增长模型(基于python)
- EXCEL 导入MSSqlserver数据库报错
- Caused by: java.io.IOException: ZIP entry size is too large
- HTML实现三级导航菜单栏
- Ubuntu下使用unison实现文件双向同步
- 高质量代码的几大标准
- 通俗理解 机器学习中的偏差和方差
- Python中find_elements以及presence_of_element_located的用法
- Rails+Nginx+Passenger安装配置 简洁可靠
- 灰狼算法(GWO)优化支持向量机的数据回归预测,GWO-SVM回归预测,多输入单输出模型。
- html 多张图片自动滚动,JS实现图片的不间断连续滚动的简单实例