用户程序通过调用操作系统提供的系统调用(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); // 等待子进程结束;
}
}

unix shell(壳)的简单实现的更多相关文章

  1. Linux/Unix shell sql 之间传递变量

    灵活结合Linux/Unix Shell 与SQL 之间的变量传输,极大程度的提高了DBA的工作效率,本文针对Linux/Unix shell sql 之间传递变量给出几个简单的示例以供参考. Lin ...

  2. PowerShell与Unix Shell对比:八大实例

    PowerShell与Unix Shell对比:八大实例 本文将从八个实例对比PowerShell和Unix Shell,通常是Linux Bourne Shell(包括sh.ksh和bash等).二 ...

  3. 【转】fnmatch模块的使用——主要作用是文件名称的匹配,并且匹配的模式使用的unix shell风格

    [转]fnmatch模块的使用 fnmatch模块的使用 此模块的主要作用是文件名称的匹配,并且匹配的模式使用的unix shell风格.fnmatch比较简单就4个方法分别是:fnmatch,fnm ...

  4. shell expect的简单用法【转】

    用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下:  ######## ...

  5. Unix shell判断和比较

    1.  shell 的$! ,$?, $$,$@ $n        $1 the first parameter,$2 the second... $#        The number of c ...

  6. 【转载】Unix Shell中用[-n]判断字符串不为NULL

    转载自:http://blog.sina.com.cn/s/blog_541086430100mosm.html 在Unix Shell中,可以使用-n来判断一个string不是NULL值,但是之前却 ...

  7. Shell函数的简单应用

    Shell函数的简单应用 在脚本内给函数传参: #!/bin/bash . /etc/init.d/functions CheckUrl (){ curl -I -s $ | head - } Che ...

  8. Linux/Unix shell 脚本中调用SQL,RMAN脚本

    Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...

  9. Linux/Unix shell 监控Oracle实例(monitor instance)

    使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...

  10. Linux/Unix shell 监控Oracle监听器(monitor listener)

    使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...

随机推荐

  1. [ACM] POJ 1046 Color Me Less

    Color Me Less Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 30146   Accepted: 14634 D ...

  2. [D3] Build a Column Chart with D3 v4

    Column and bar charts are staples of every visualization library. They also make a great project for ...

  3. IDEA 创建Web项目并在Tomcat中部署运行(转)

    原文地址:https://www.cnblogs.com/tufujie/p/5738250.html IDEA 14.0.5 apache-tomcat-8.0.32 步骤:File->New ...

  4. [TypeScript] The Basics of Generics in TypeScript

    It can be painful to write the same function repeatedly with different types. Typescript generics al ...

  5. layui是什么

    layui是什么 一.总结 一句话总结:初步看起来比amazeui好看一点点.移动端显示看起来效果真心不错.还有即时聊天那个组件下载,感觉真心不错,可以多去看看. 二.Layui 1.简介 经典模块化 ...

  6. GDB如何调试没有符号表(未加-g选项的编译)的程序

    /********************************************************************* * Author  : Samson * Date    ...

  7. 33、给华美A100刷固件

    给HAME A100刷固件 目的: 1. 给HAME A100刷固件 2. 配置上UVC驱动 3. 修改内核自带的UVC驱动,使其支持我们自制的二合一摄像头 4. 移植mjpg-streamer 5. ...

  8. svn 清理失败 (clean up 失败) 的解决方法

    解决方法: step1: 到 sqlite官网 (http://www.sqlite.org/download.html) 下载 sqlite3.exe 找到 Precompiled Binaries ...

  9. Hadoop常见异常及其解决方案 分类: A1_HADOOP 2014-07-09 15:02 4187人阅读 评论(0) 收藏

    1.Shell$ExitCodeException 现象:运行hadoop job时出现如下异常: 14/07/09 14:42:50 INFO mapreduce.Job: Task Id : at ...

  10. 【C#】万事开头难(二)<机房重构>

    前言 机房将要进行完了,之所以仍然使用这个题目,是由于我想告诉自己.无论面对多么未知的事物.不要害怕,去做就好.在这么多天的机房重构中,发现了好多问题,也攻克了好多问题,今天,就把我解决的问题分享给大 ...