首页 > > 详细

辅导ICS 53编程设计、讲解program程序、c/c++,Java编程语言辅导辅导R语言编程|讲解Database

ICS 53, Winter 2021
Assignment 2: A Simple Shell
A shell is a program which allows a user to send commands to the operating system (OS), and allows the
OS to respond to the user by printing output to the screen. The shell allows a simple character-oriented
interface in which the user types a string of characters (terminated by pressing the Enter(\n)) and the OS
responds by printing lines of characters back to the screen.
Typical Shell Interaction
The shell executes the following basic steps in a loop.
1. The shell prints a “prompt>” to indicate that it is waiting for instructions.
prompt>
2. The user types a command, terminated with an character (‘\n’). All commands are of
the form COMMAND [arg1] [arg2] ... [argn].
prompt> ls
3. The shell executes the chosen command and passes any arguments to the command. The
command prints results to the screen. Typical printed output for an ls command is shown below.
hello.c hello testprog.c testprog
Types of commands that your shell must support
There are two types of commands, built-in commands which are performed directly by the shell, and
general commands which indicate compiled programs which the shell should cause to be executed.
Your shell will support five built-in commands: jobs, bg, fg, kill, and quit. You shell must also support
general commands.
General commands can indicate any compiled executable. We will assume that any compiled executable
used as a general command must exist in the current directory. The general command typed at the shell
prompt is the name of the compiled executable, just like it would be for a normal shell. For example, to
execute an executable called hello the user would type the following at the prompt:
prompt> hello
Built-in commands are to be executed directly by the shell process and general commands should be
executed in a child process which is spawned by the shell process using a fork command. Be sure to reap
all terminated child processes.
Job Control
A job is a process that is created (forked) from the shell process. Each job is assigned a sequential job ID
(JID). Because a job is also a process, each job has an associated process ID (PID). There are three types
of job statuses:
• Foreground: When you enter a command in a terminal window, the command occupies that
terminal window until it completes. This is a foreground job.
Prompt > hello
• Background: When you enter an ampersand (&) symbol at the end of a command line, the
command runs without blocking the terminal window. The shell prompt is displayed
immediately after you press Return. This is an example of a background job.
Prompt > hello &
• Stopped: If you press ctrl-Z while a foreground job is executing, the job stops. This job is called a
stopped job and it can be restarted later by the receipt of a SIGCONT signal.
Any built-in command is always executed in the foreground. When a command is executed in the
foreground, the shell process must wait for the child process to complete. Please note that only one job
can run in the foreground while many can run in the background.
Unix shells support the notion of job control, which allows users to move jobs back and forth between
background and foreground, and to change the process state (running, stopped, or terminated) of the
processes in a job. Typing ctrl-C causes a SIGINT signal to be delivered to the process which is the
foreground job. The default action for SIGINT is to terminate the process. Similarly, typing ctrl-Z causes a
SIGTSTP signal to be delivered to the process which is the foreground job. The default action for SIGTSTP
is to place a process in the stopped state, where it remains until it is awakened by the receipt of a
SIGCONT signal.
Built-In Commands
• jobs: List the running and stopped background jobs. Status can be “Running”, “Foreground”,
and “Stopped”. Format is following.
[] ( )
prompt> jobs
[1] (30522) Running hello &
[2] (30527) Stopped sleep
• fg

联系我们
  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp
热点标签

联系我们 - QQ: 99515681 微信:codinghelp
程序辅导网!