Linux进程管理基础及作业操作

一、进程相关概念:

进程是正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如说CPU,IO,内存,网

络资源等。通过学习Linux系统进程管理来协调多道程序之间的关系,使CPU得到充分的利用。

进程和程序的区别是什么?

进程是一个动态的概念,当用户把一个程序或命令执行起来的时候,才有进程的概念,

系统会自动分配一个编号PID给进程。

程序是一个静态的概念,表现为一个文件

进程的分类:

  • 根据进程与系统终端的关系:

    守护进程:在系统引导过程中启动的进程,即跟终端无关的进程。
    
    前台进程:跟终端相关,通过终端启动的进程;
    
    注:守护进程和前台进程可相互转化
    
  • 根据进程占用资源的多少分为:

    CPU密集型:对cpu占用率高的进程
    
    IO密集型:占用磁盘读写高的进程
    

进程的状态:

进程在被内核调度过程中的状态可分为很多种:

1.运行态:running 进程正在运行中

2.就绪态:ready

3.睡眠态:sleeping

    可中断睡眠:interruptible  大部分进程处于此状态,随时可唤醒

    不可中断睡眠:uninterruptible

4.僵尸态:zombie 找不到归属的进程,或父进程已不存在

5.停止态:stopped 不可被调度并运行

进程优先级

  • 系统优先级:数字越小,优先级越高

    0-139(CentOS4,5)
    
    各有140个运行队列和过期队列
    
    0-98,99(CentOS6)
    
  • 实时优先级: 99-0 值最大优先级最高

  • nice值:-20到19,对应系统优先级100-139或99

    Big O:时间复杂度,用时和规模的关系(越往左越好)

    O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)
    

进程内存:

Page Frame: 页框,用存储页面数据,存储Page 4k

LRU:Least Recently Used 近期最少使用算法,释放内存

物理地址空间和线性地址空间

MMU:Memory Management Unit负责转换线性和物理地址

TLB:Translation Lookaside Buffer 翻译后备缓冲器,用于保存虚拟地址和物理地址

映射关系的缓存

IPC: Inter Process Communication

同一主机: signal:信号

shm: shared memory

semaphore:信号量,一种计数器

不同主机:socket: IP和端口号

RPC: remote procedure call       远程过程调用

MQ:消息队列,Kafka,ActiveMQ

二、信号操作管理

我们指定同一主机间的程序是通过信号来进行通讯的,那么我们也可以通过发送信号的方式对进程进行管理。

使用kill -l 命令可以查看当前支持的信号类型:

信号的表示方式:

  1. 数字表示:1,2,9

  2. 完整名称:SIGHUP

  3. 简写名称:HUP

常用信号类型有:

SIGHUP:1,无须关闭进程而让其重新读取配置文件,使新配置生效

SIGINT:2,打断正在运行中的进程,相当于Ctrl+c

SIGQUIT:3,相当Ctrl+\

SIGKILL:9,强制杀死正在运行的进程

SIGTERN:15,终止正在运行的进程(kill命令默认信号)

SIGCONT:18,继续运行指定进程

SIGSTOP:19,后台休眠

信道管理命令

  • kill: 通过PID进程编号向进程发送信号指令,以及显示当前系统可用的信号

    如:kill -9 123                 强制杀死PID为123的进程
    
  • killall: 通过进程名来向进程所有同名进程发送信号指令

    如:killall -9 sleep      强制杀死sleep所有同名的进程
    
  • pkill: 通过进程名来发送信号指令,支持greo的匹配模式

    pkill [options] pattern
    
        options:
    
        -SIGNAL
    
        -u uid                生效者
    
        -U uid               真正发起运行命令者
    
        -t terminal       与指定终端相关的进程
    
        -P pid                显示指定进程的子进程
    
    如:pkill -9 -t tty2  强制杀死tty2终端下的所有进程
    

三、作业管理(job control)

我们知道,在登录系统后每一个工作进程都是当前bash的子进程,通过作业管理我们可以

实现多个进程同时运行,这里我们要涉及到两个新的名词:前台作业和后台作业

前台作业:通过终端前,且启动后一直占据终端

后台作业:可通过终端启动,但启动后即转入后台运行(释放前端)

作业状态切换:

作用运行一共有三种状态,分别为:前台执行、后台执行与后台休眠(stoped)

jobs命令: 显示当前作业编号以及作业状态

  • 让作业运行于后台:

    尚未启动的作业:COMMAND &
    
    运行中的作业:Ctrl+z,后台休眠状态
    
  • 将后台休眠|运行作业调回前台运行:

    fg job_num      将作业在前台运行(foreground)
    
  • 将后台休眠作业执行后台运行:

    bg job_num     将作业在后台运行(background)
    
  • 关闭后台执行:

    fg job_num;ctrl+c
    
    kill %job_num
    

并行运行

同时运行多个进程,提高效率

  • 方法1:

利用脚本

vi all.sh

f1.sh&

f2.sh&

f3.sh&
  • 方法2:

    (CMD1&);(CMD2&);(CMD3&)
    
  • 方法3:

    { CMD1& CMD2& CMD3& }

执行长时间任务时防止网络中断造成操作中断

  • 方法1:剥离命令与终端的联系,终端中断后进程将转移至1进程上,再恢复

    nohup COMMAND &>/dev/null &
    
  • 方法2:开启一个screen会话,重新进入后screen -r即可恢复

    screen;COMMAND;screen -r 恢复
    

猜你喜欢

转载自blog.csdn.net/lv8549510/article/details/80550640