Linux进程及作业控制

inux进程


进程的概念

当一个系统启动时,刚开机是第一个运行的是内核代码!先把内核放到cpu上运行,等内核控制和掌管了一切,有内核启动进程!然后创建第一个进程 init进程  内核空间 用户空间也都已被创建成功!后期的一切管理工作都由init来负责

init不能代表系统完成一些内核特权的执行!但由他负责向内核提交

他是总的由用户管理的总进程,它会照自己样子创建一个子进程,除了init以外,所有的进程都是由其父进程创建! init是由 上帝(kernel)创造出来的

父进程如何创建子进程,是 fork 自身而来!父进程在创建子进程时是使用同一段内存空间!
  • 内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能

  • Process: 运行中的程序的一个副本,是被载入内存的一个指令集合

    • 进程ID(Process ID,PID)号码被用来标记各个进程

    • UID、GID、和SELinux语境决定对文件系统的存取和访问权限,

    • 通常从执行进程的用户来继承

    • 存在生命周期

  • Linux内核存储进程信息的固定格式:task struct

  • 多个任务的的task struct组件的链表:task list

进程创建:

init:第一个进程
    父子关系
    进程:都由其父进程创建
        fork(), clone()

进程优先级:

系统优先级:数字越小,优先级越高
    0-139(CentOS4,5)
        各有140个运行队列和过期队列
    0-98,99(CenOS6)
        实时优先级: 99-0:值最大优先级最高
Nice值:-20,19对应系统优先级100-139或99

Nice值:
    -20,19

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负责转换线性和物理地址

事实上应用程序是不可能访问硬件(包括内存),内核就是为了完成资源分配的,会把内存切割成固定大小的片段分配给各个应用使用大小为  4K!
内核分配多个不连续的内存,并把它们假装成连续的(用一个中间层!使应用假装跑在连续的内存中)

IPC: Inter Process Communication 进程之间的通信

  • 同一主机上:

      signal   发信号
      shm: shared memory  使用共享内存,读其他进程的内存空间
      semerphor  发一个短小的信号!
  • 不同主机上:

      rpc: remote procecure call  远程过程调用
      socket: 基于套接字通信!
       首先创建一个 socket 文件 :一端保存着自己的端口,还保存有对方的通信端口   进程关闭了就把这个关闭

Linux内核:抢占式多任务

进程类型:

  • 守护进程: 在系统引导过程中启动的进程,跟终端无关的进程;

  • 前台进程:跟终端相关,通过终端启动的进程

注意:也可把在前台启动的进程送往后台,以守护模式运行;

进程状态:

  • 运行态:running

  • 就绪态:ready

  • 睡眠态:

    • 可中断:interruptable

    • 不可中断:uninterruptable

  • 停止态:暂停于内存中,但不会被调度,除非手动启动之;stopped

  • 僵死态:zombie

进程的分类:

CPU-Bound:CPU密集型,非交互
IO-Bound:IO密集型,交互

系统进程管理工具

Linux系统状态的查看及管理工具:pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup

pstree命令

pstree命令以树状图的方式展现进程之间的派生关系,显示效果比较直观。

显示当前所有进程的进程号和进程id
pstree -p

[root@qzx /etc/yum.repos.d ]# pstree -p
systemd(1)─┬─ModemManager(789)─┬─{ModemManager}(807)
           │                   └─{ModemManager}(818)
           ├─NetworkManager(44463)─┬─dhclient(47671)
           │                       ├─dhclient(47742)
           │                       ├─{NetworkManager}(44464)
           │                       └─{NetworkManager}(44467)
           ├─abrt-watch-log(828)

显示所有进程的所有详细信息,遇到相同的进程名可以压缩显示。
pstree  -a

ps 列举进程

适用ps来查看进程信息

语法 ps [OPTION]…

支持三种选项:

  • UNIX选项 如-A -e

  • BSD选项 如a

  • GUN选项 如—help
    • 默认显示当前终端中的进程
    • a 选项包括所有终端中的进程
    • x 选项包括不链接终端的进程
    • u 选项显示进程所有者的信息
    • f 选项显示进程的父进程
    • o 属性… 选项显示定制的信息:
     pid、comm、%cpu、%mem、state、tty、euser、ruser

常用组合之一:aux

    VSZ:虚拟内存集;
    RSS:Resident Size,常驻内存集;
    STAT:
        R:running
        S:interruptable sleeping
        D:uninterruptable sleeping
        T:Stopped
        Z:zombie

        +:前台进程
        l:多线程进程
        N:低优先级进程
        <:高优先级进程
        s:session leader

常用组合之二:-ef

  • -e:显示所有进程

  • -f:显示完整格式的进程信息

  • -F:显示完整格式的进程信息;

    • C: cpu utilization

    • PSR:运行于哪颗CPU之上

  • -H:以层级结构显示进程的相关信息;

常用组合之三:-eFH

常用组合之四:-eo, axo

    o  field1, field2,...:自定义要显示的字段列表,以逗号分隔;
    常用的field:pid, ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio

    ni:nice值;
        priority:priority, 优先级;
        rtprio:real time priority,实时优先级;

搜索进程

最灵活:ps 选项 | 其它命令

按预定义的模式:pgrep

pgrep [options] pattern
   -u uid: effective user,生效者

-U uid: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-l: 显示进程名
-a: 显示完整格式的进程名
-P pid: 显示指定进程的子进程

按确切的程序名称:/sbin/pidof
$pidof bash

uptime

[root@LinServ-1 ~]# uptime
 15:31:30 up 127 days,  3:00,  1 user,  load average: 0.00, 0.00, 0.00

        15:31:30          //系统当前时间
        up 127 days,  3:00   //主机已运行时间,时间越大,说明你的机器越稳定。
        1 user      //用户连接数,是总连接数而不是用户数
        load average: 0.00, 0.00, 0.00  // 系统平均负载,统计最近1,5,15分钟的系统平均负载

显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1、5、10分钟的平均负载,一般不会超过1)

系统平均负载:

指在特定时间间隔内运行队列中的平均进程数。

如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。

如果linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。

top:

排序:

  • P:以占据的CPU百分比,%CPU

  • M:占据内存百分比,%MEM

  • T:累积占据CPU时长,TIME+

首部信息显示:

  • uptime信息:l命令

  • tasks及cpu信息:t命令

  • cpu分别显示:1 (数字)

  • memory信息:m命令

选项:

  • -d #:指定刷新时间间隔,默认为3秒;

  • -b:以批次方式显示;

  • -n #:显示多少批次;

退出命令:q

修改刷新时间间隔:s

终止指定进程:k

保存文件:W

%Cpu(s):对应的那一横栏:

Linux进程及作业控制
us:用户空间
sy:内核空间
ni:调整nice时间
id:空闲
wa:等待IO时间
hi:硬中断
si:软中断(模式切换)
st:虚拟机偷走的时间

黑底的栏位信息简介

PID (Process Id ) :  任务的进程ID
PPID (Parent Process Pid) :  父任务的进程ID
RUSER (Real User Name) : 任务的所有者真实名称
UID (User Id) : 任务所有者ID
USER (User Name) : 任务所有者名称
GROUP (Group Name) : 任务所有者群组名
TTY (Controlling Tty) : 终端
PR (Priority):优先级
%CPU (CPU usage) : CPU使用率
%MEM (Memory usage (RES)) : 内存使用率
S (Process Status) : 进程状态
TIME+ (CPU Time, hundredths) : CPU时间,精确到秒

htop命令:需从Fedora-EPEL源安装

http://172.16.0.1/fedora-epel/7/x86_64

选项:

  • -d #: 指定延迟时间;

  • -u UserName: 仅显示指定用户的进程;

  • -s COLUME: 以指定字段进行排序;

子命令:

  • s: 跟踪选定进程的系统调用;

  • l: 显示选定进程打开的文件列表;

  • a:将选定的进程绑定至某指定CPU核心;

  • t: 显示进程树 或者 F5
    Linux进程及作业控制

vmstat命令:

  • Report virtual memory statistics

      vmstat 2 10
      表示 命令每2秒钟刷新一次,刷新10次

Linux进程及作业控制
Linux进程及作业控制

pmap命令:进程对应的内存映射表

语法 pmap [选项] pid […]

-x: 显示详细格式的信息;

#pmap 1
查看 1 号进程的系统映射

另外一种实现:
# cat /proc/PID/maps

glances命令:EPEL源

glances
[-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P
password] [—password] [-t refresh] [-f file] [-o output]

常用选项:

  • -b: 以Byte为单位显示网卡数据速率

  • -d: 关闭磁盘I/O模块

  • -f /path/to/somefile: 设定输入文件位置

  • -o {HTML|CSV}:输出格式

  • -m: 禁用mount模块

  • -n: 禁用网络模块

  • -t #: 延迟时间间隔

  • -1:每个CPU的相关数据单独显示

C/S模式下运行glances命令

1、服务模式:

glances -s -B IPADDR
IPADDR: 指明监听的本机哪个地址

2、客户端模式:

glances -c IPADDR
IPADDR:要连入的服务器端地址

dstat命令:系统资源统计

dstat [-afv] [options..] [delay [count]]

Linux进程及作业控制

  • -c: 显示cpu相关信息

    • -C #,#,…,total(总体的)

  • -d: 显示磁盘的相关信息

    • -D total,sda,sdb,…total

  • -g:显示page相关统计数据

  • -m: 显示memory相关统计数据

  • -n: 显示network相关统计数据

  • -p: 显示process相关统计数据

  • -r: 显示io请求相关的统计数据

  • -s: 显示swapped相关的统计数据

  • —tcp

  • —udp

  • —unix

  • —raw

  • —socket

  • —ipc

  • —top-cpu:显示最占用CPU的进程

  • —top-io: 显示最占用io的进程

  • —top-mem: 显示最占用内存的进程

  • —top-latency: 显示延迟最大的进程


kill命令:

向进程发送控制信号,以实现对进程管理

显示当前系统可用信号: kill -l

常用信号:man 7 signal

  • 1) SIGHUP: 无须关闭进程而让其重读配置文件

  • 2) SIGINT: 中止正在运行的进程;相当于Ctrl+c

  • 9) SIGKILL: 杀死正在运行的进程

  • 15) SIGTERM:终止正在运行的进程

  • 18) SIGCONT:继续运行

  • 19) SIGSTOP:后台休眠  相当于ctrl+z

如果复制一个大文件,可以用 ctrl+z送到后台,不过这是是停止状态,可以再用 kill 18 加这个进程  就可以继续进行了

指定信号的方法:

  • (1) 信号的数字标识;1, 2, 9

  • (2) 信号完整名称;SIGHUP

  • (3) 信号的简写名称;HUP

按PID:kill [-SIGNAL]  pid …

按名称:killall [-SIGNAL]  (名称)comm…

按模式:pkill [options] pattern

  • -SIGNAL

  • -u uid: effective user,生效者

  • -U uid: real user,真正发起运行命令者

  • -t terminal: 与指定终端相关的进程

  • -l: 显示进程名

  • -a: 显示完整格式的进程名

  • -P pid: 显示父进程为此处指定的进程的进程列表

例如:

pkill -t pts/2
表示杀掉 pts/2终端的进程!但是依赖的 bash 杀不了因为发的是 -15信号 要想杀全 就用 pkill -9 -t pts/2

jobs:

前台作业(foregroud):通过终端启动,且启动后会一直占据终端;
后台作业(backgroud):可以通过终端启动,但启动后即转入后台运行(释放终端);

如何让作业运行于后台?

(1) 运行中的作业

Ctrl+z
注意:送往后台后,作业会转为停止态;    

(2) 尚未启动的作业

# COMMAND &

注意:此类作业虽然被送往后台,但其依然与终端相关;如果希望把送往后台的作业剥离与终端的关系

nohup  COMMAND  &

注意此命令执行后即使父进程关闭依然会运行!执行它的父进程为init。这时只能关闭不能再调入前台了~只能用kill关闭

查看所有作业:

# jobs

作业控制:

fg [%]JOB_NUM :把指定的后台作业调回前台;

bg [%]JOB_NUM :让送往后台的作业在后台继续运行;

kill %JOB_NUM :终止指定的作业 %号不可省!!

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

1、 vi all.sh
    f1.sh&
    f2.sh&
    f3.sh&

2、 (f1.sh&);(f2.sh&);(f3.sh&)

3、 { f1.sh& f2.sh& f3.sh& }

进程优先级调整:

静态优先级:100-139

进程默认启动时的nice值为0,优先级为120

只有根用户才能降低nice值(提高优先性)

数值越低,优先级越高!

nice命令:

nice [OPTION] [COMMAND [ARG]…]

    [root@localhost ~]# nice -n 10 ping 10.1.0.1 
    调整进程优先级为 10

renice命令:对已运行的进程调整nice值

renice [-n] priority pid…

Linux进程及作业控制

查看nice:

ps axo pid,comm,ni

原创文章,作者:qzx,如若转载,请注明出处:http://www.178linux.com/45219

(0)
上一篇 2016-09-10 13:47
下一篇 2016-09-10 20:24

相关推荐

  • Ansible

    Ansible简介 ansible是一种基于python语言开发的轻量级自动化运维工具,它可以自动化批量完成主机服务配置管理,软件部署,执行特定命令等工作 ansible的核心组件有ansible core(核心代码),host inventory(要管理的主机),core modules(核心模块),custom modules(用户可以自定义模块),pl…

    Linux干货 2016-11-14
  • 五种开源协议的比较(BSD,GPL,LGPL,Apache,BSD)

    BSD开源协议(original BSD license、FreeBSD license、Original BSD license) BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。 但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码…

    Linux干货 2016-01-16
  • 交换分区管理

    创建交换分区 linux上的交换分区必须使用独立的文件系统且文件系统的systemid必须为82mkswap [options] device [size] 创建交换分区文件系统 挂载交换分区     swapon 设备名称 处理交换文件和分区     交换分区是系统RAM的补充  &nb…

    Linux干货 2016-09-02
  • N25-第十周博客作业

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) 内核空间的启动流程 一. POST 加电自检 在加电之后,智能设备所运行的内部存储的一系列检测程序集合。缩写为POST。这些检测程序在软件加载到硬件上运行之前对硬件的基本完整性加以验证。 用于实现POST的代码在主板上ROM(CMOS)芯片上。 二. Boot Sequence(BI…

    Linux干货 2017-03-25
  • 硬链接与软链接的区别

    硬链接(Hard Link):   硬连接指通过索引节点来进行链接(即一个指针指向文件索引节点)。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种链接就是硬链接。硬链接的作用是允许一个文件拥有多个有效路径…

    Linux干货 2016-10-20
  • systemd及awk

    1、简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理
    2、描述awk命令用法及示例(至少3例)
    3、描述awk函数示例(至少3例)

    Linux干货 2018-01-17