Linux是一种用户控制的多作业操作系统,系统允许多个系统用户同时提交作业,而一个系统用户又可能用多个Shell登录,每个系统用户可以用一个Shell提交多个作业
1 子Shell
1 父子Shell是相对的,它描述了两个Shell进程的fork关系,父Shell指在控制终端或窗口给出提示符的进程,子Shell是由父Shell创建的进程,在Linux中,只有一个函数可以创建子进程,那就是fork函数
2 圆括号结构能够强制将其中的命令运行在子Shell中,它的基本格式为
(command1 command2 command....n)
上述结构表示圆括号内的n条命令在子Shell中运行
3 子Shell能够从父Shell继承得来的属性如下
1 当前工作目录
2 环境变量
3 标准输入,标准输出和标准错误输出
4 忽略的信号
5 除了环境变量和.bashrc文件中定义变量之外的Shell变量
6 未被忽略的信号处理
2 进程处理
1 进程和作业是有区别的,一个正在执行的进程称为作业,一个作业可以包含多个进程。用户提交作业到操作系统,作业的完成可能依赖于启动多个进程。因此简单的说,作业是用户层面的概念,而进程是操作系统层面的概念
2 进程是针对整个Linux系统而言的,作业是针对Shell而言的。作业有两种运行方式,前台运行和后台运行
3 前台运行的作业指能够控制当前终端或窗口,且能接收用户的输入;而后台的运行的作业则不在当前激活的终端或窗口中运行,是在用户看不见的情况下运行的
4 Shell中内置命令fg能够把后台的作业放到前台运行,如果没有带参数的fg命令就是将最近提交的那个后台作业放置到前台运行
5 指定作业的方法及其意义
参数 意义
%n n为后台作业的作业号
%string 命令以string字符串开始的后台作业
%?string 命令包含string字符串的后台作业
%+或%% 最近提交的后台作业
%- 最近第二个提交的后台作业
6 Shell内置的命令jobs是用于显示所有后台运行的作业
3 信号
1 向进程发送信号大多通过"Crtl"键加上一些功能键来实现的
2 Ctrl组合键,信号类型及其意义
组合键 信号类型 意义
Ctrl+C INT信号,即interupt信号 停止当前运行的作业
Ctrl+Z TSTP信号,即terminal stop信号 使当前运行的作业暂时停止(转入阻塞态)
Ctrl+\ QUIT信号 Ctrl+C的强化版本,当Ctrl+C无法停止作业时,使用此组合键
Ctrl+Y TSTP信号,即terminal stop信号 当进程从终端读取输入数据时,暂时停止该进程