zoukankan      html  css  js  c++  java
  • 十三、子shell与进程处理

    1 子shell

    • 概念

      在linux中,fork函数能够创建子进程

    1.2 冒号的特殊用法

    • 表示永真,相当于TRUE关键字

      while :   #表示永真
      do 
      ...
      done
      
    • 冒号可以清空一个文件

      :>filename
      
    • 不做任何事,只做参数展开

    1.3 圆括号结构

    • 定义

      圆括号结构能够强制将其中的命令运行在子shell中

    • 语法

      (
      	command 1
      	command 2
      	...
      	command 3
      )
      
    • 说明

      • 子shell允许嵌套调用,在函数或圆括号结构内再次调用圆括号结构创建子shell

    1.4 子shell继承父shell的属性

    • 说明

      子shell只能继承父shell的一些属性,不能反过来改变父shell的属性

    • 子shell能从父shell继承的属性

      • 当前工作目录
      • 环境变量
      • 标准输入、标准输出和标准错误输出
      • 所有已打开的文件标识符
      • 忽略的信号
    • 子shell不能从父shell继承的属性

      • 除了环境变量和.bashrc文件中定义变量之外的shell变量
      • 未被忽略的信号处理

    2 进程处理

    fork时linux系统的一种系统调用,系统调用用于请求内核服务,是进程访问硬件的唯一办法。

    2.1 进程和作业

    • 进程

      • 定义

        进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,用进程号标识,属于操作系统层面的概念

      • 进程的状态

        • 就绪状态(Ready):当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行
        • 运行状态(Running):当进程已获得处理机,其程序正在处理机上执行
        • 阻塞状态(Blocked):正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态
    • 作业

      • 定义

        一个正在执行的进程或多个进程,称为作业,用作业号标识,属于用户层面的概念

    2.2 作业控制

    • 作业的前台和后台

      内建命令fg可将后台运行的作业放到前台,而&符号使得作业在后台运行。

    • fg指定作业方法及其意义

      参数 意义
      %n n为后台作业的作业号
      %string 命令以string字符串开始的后台作业
      %?string 命令包含string字符串的后台作业
      %+或%% 最近提交的后台作业
      %- 最近第二个提交的后台作业

      fg命令不带任何参数,表示将最近提交的那个后台作业放置到前台

    • jobs命令

      jobs命令用于显示所有的后台作业

      jobs命令后加上-l参数,则附带显示作业的进程号

    • Ctrl+Z组合键,可将正在运行的作业阻塞

      在“Ctrl+Z”组合键之后输入bg命令可使阻塞状态的作业转入后台运行

    • disown命令

      disown命令用于从shell的作业表中删除作业

    • wait命令

      wait命令用于等待后台作业完成

    • 说明

      fg、bg和jobs命令只能以作业号为参数来指定作业,这三个命令是不能使用进程号的

    3 信号

    • 定义

      信号是在软件层次上对中断机制的一种模拟,是进程间通信机制中唯一的异步通信机制

    • 信号时间来源

      • 硬件来源:按下键盘或其他硬件故障
      • 软件来源:发送信号的系统函数如kill、raise、alarm、setitime和sigqueue函数,以及一些非法运算等操作
    • Ctrl组合键、信号类型及其意义

      组合键 信号类型 意义
      ctrl+c INT信号,即interrupt信号 停止当前运行的作业
      ctrl+z TSTP信号,即terminal stop信号 使当前运行的作业暂时停止(转入阻塞态)
      ctrl+ QUIT信号 Ctrl+c的强化版本,当ctrl+C无法停止作业时,使用此组合键
      ctrl+y TSTP信号,即terminal stop信号 当进程从终端读取输入数据时,暂时停止该进程
    • kill命令

      • kill $$ 杀掉自己本身的进程,$$记录了运行该脚本的进程号

      • kill -l 命令可以列出kill命令所能发出的所有信号及其标号

      • kill -9 %1 :kill命令向1号作业发送9号信号杀死进程,9号信号实际上就是KILL信号,即 kill -KILL %1

    • trap命令

      • 定义

        trap命令是linux的内建命令,用于捕捉信号,可以指定收到某种信号时所执行的命令

      • 语法

        trap command sig1 sig2 ... sigN
        

        表示当收到sig1、sig2...、sigN中任意一个信号时,执行command命令,command命令完成后,脚本继续收到信号前的操作,直到脚本执行结束

        • command用空字符串(""或'')代替,表示什么都不做
  • 相关阅读:
    【译】Arc 在 Rust 中是如何工作的
    TCP连接时动态端口的相关问题说明
    技巧:如何区分dll程序集的编译目标平台(同样适用于查看程序集的其它依赖)
    探究:nuget工具对不再使用的dll文件的处理策略
    .net core迁移实践:项目文件csproj的转换
    nuget使用经验:复杂依赖关系下的包版本问题
    rsyslog学习和使用记录
    死锁场景:双Update操作的情况
    kubernetes官网对中国区的优待
    数据库死锁分析和说明:select和update死锁场景举例
  • 原文地址:https://www.cnblogs.com/nuochengze/p/14563375.html
Copyright © 2011-2022 走看看