Linux自学笔记——linux进程及作业管理

简介:

 

内核的功用主要有进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能这几个方面,本文主要讨论linux进程及作业管理。

进程管理

      进程,process,运行中程序的一个副本,且存在生命周期;

      进程分为CPU bound和I/Obound。

           CPU bound:CPU密集型(类似于高清视频)

           I/O bound:IO密集型(编辑器等频繁IO操作)

      Linux内核存储进程信息的固定格式为:task struct(结构体)

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

      进程创建:

           在centos6上,init为初始化进程,父进程。

           请求发出者(进程)都由父进程创建,然后为系统调用;

           进程:fork()   clone()

      IPC: Inter Process Communication

           同一主机上:

                 signal

                 shm: shared memory

                 semerphor

           不同主机上:

                 rpc: remote procecure call

                 socket:

      进程调度:保存现场,恢复现场

           进程运行程序,是程序的一部分

                 多任务:多进程同时运行

                            抢占式多任务

      进程优先级:

      0-139

           1-99:实时优先级,数字越大,优先级越高;

           100-139:静态优先级,数字越小,优先级越高;

           Nice值:-20,19   -20相当于100,19相当于139;

      每个进程运行时间不同,linux支持抢占式多任务,当一个低优先级的程序在运行,这时有一个高优先级的运行,过段时间后这个高优先级的提前运行。

      算法复杂度:Big 0 (衡量标准算法)

           o(1):恒定的,无论优先级,消耗时间相同(最佳的)

o(logn):每次调度,调度程序需要从树中找出优先级最高的进程

o(n):线性的

o(n^2):抛物线机制

o(2^n):随队列深度增长

      进程状态:

           运行态:running

           就绪态:ready

           睡眠态:

                 可中断:interruptable

                 不可中断:uninterruptable

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

           僵死态:zombie

Linux系统上的进程查看及管理工具:

     在linux系统中主要的进程管理工具有:pstree,ps,pidof,pgrep,top,htop,glances,pmap,vmstat,dstat,kill,job,bg,fg,nohup,nice,renice,killall,…

1.     pstree命令:

pstree - display a tree of processes

wKioL1mmXzvyK77ZAABd3yrqLoA602.png-wh_50    

在centos6中父进程为init,而在centos7中,父进程为systemd

 wKioL1mmX1KhWadQAAB8gG_fDzQ792.png-wh_50

pstree –p:显示各进程的PID

wKiom1mmX3XQZHdlAABf-FOy6jI398.png-wh_50

其它用法选项可参照man手册。

2.     ps命令:process state

ps命令显示的是ps命令执行时系统上进程信息的快照,是静态的结果。

Linux运行中的内核的相关信息是通过/proc伪文件系统输出的;各进程都有一个其PID命名的子目录,每个子目录中许多文件存储了进程的相关信息。

进程文件:/proc/#

             #:PID

wKioL1mmX2yC1240AACLw54PRag317.png-wh_50

ps - report a snapshot of the current processes.

wKioL1mmX3vjDGeSAAANeJlWFLQ029.png-wh_50

ps [options]

选项有三种风格:

1 UNIX options, which maybe grouped and must be preceded by a dash.

2 BSD options, which maybe grouped and must not be used with a dash.

3 GNU long options, which arepreceded by two dashes.

      启动进程的方式:

           系统启动过程中自动启动:与终端无关的进程;

           通过用户终端启动:与终端相关的进程;

      常用组合之一:aux

           a:所有与终端相关的进程;

           x:所有与终端无关的进程;

           u:以用户为中心组织进程状态信息显示;

           wKiom1mmX8TyK9EBAABjQ6Fh4n8012.png-wh_50

           VSZ:虚拟内存集;

           RSS:Resident Size,常驻内存集;

           STAT

                 R:running;

                 S:interruptable sleeping

                 D:uninterruptable sleeping

                 T:stopped

                 Z:zombie

             

                 +:前台进程;

                 1:多线程进程;

                 N:低优先级进程;

                 <:高优先级进程;

                 s:session leader;

      常用组合之二:-ef

           -e:显示所有进程;

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

           wKioL1mmYj3jsMLBAABzg1rJeCk487.png-wh_50

      常用组合之三:-eFH

           -F:显示额外信息

                 C:cpu utilization   cpu利用率

                 PSR:运行在哪一颗cpu之上

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

               wKioL1mmYkmAtGnuAACBDJxfmjk504.png-wh_50

         常用组合之四:-eo,axo

           o field2,field2,…:自定义要显示的字段列表,以逗号分隔;

                 常用的field:pid,ni,pri,psr,pcpu,stat,comm,tty,ppid,rtprio

                      ni:nice值;

                      priority:优先级;

                      rtprio:realtime priority,实时优先级;

           wKiom1mmYmvRGAg9AAA57Ul0edw161.png-wh_50

3.     pgrep,pkill命令:

pgrep, pkill - look up or signalprocesses based on name and other attributes

pgrep [options] pattern

  -uuid:effectiveuser;

  -Uuid:readuser;

  -tTERMINAL:与指定的终端相关的进程;

  -l:显示进程名;

  -Ppid:显示此进程的子进程;

   wKiom1mmYnXS1QYTAAAZ_7XY5SI161.png-wh_50

pkill的用法与pgrep完全一样。

4.     pidof命令:根据进程名,取其id

pidof -- find the process ID of a running program.

pidof  [ program ]

wKiom1mmYoHzCKevAAANgqtzXF8384.png-wh_50

5.     top命令:

top - display Linux tasks

wKiom1mmYoyQ0XUjAADCQKm9jQs263.png-wh_50

排序:

  P:以占据cpu百分比排序;

  wKioL1mmYoHDoW1sAAC_ycEkKOo742.png-wh_50

  M:已占据内存百分比排序;

  wKioL1mmYouTenN_AAEOTxATVag684.png-wh_50

  T:累计占用CPU时间排序;

  wKiom1mmYqqBU0iuAAD7H-7sAkQ691.png-wh_50

首部信息:按以下命令可以显示或隐藏指定的信息;

  uptime信息:l命令

  tasks及cpu信息:t命令

  内存信息:m命令

退出命令:q

修改刷新时间间隔:s

wKiom1mmYrvQ8nDOAADGb5ktpzU963.png-wh_50

终止指定的进程:k

wKiom1mmYsbgdwgvAADDzgsUd0g174.png-wh_50

选项:

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

       #top –d 1:指定刷新时间为1秒刷新一次;

  wKioL1mmYs6wuNiuAACyz4UvSyk357.png-wh_50

  -b:以批次方式显示;

  -n #:显示多少批次;

        #top –b –n 2:以批次显示显示两批,自动退出;

  wKiom1mmYvTTnrwnAACeI_040NY792.png-wh_50

6.     uptime命令:显示系统时间、运行时长及平均负载;

过去一分钟、五分钟和十五分钟的平均负载;

  等待运行的进程队列的长度;

uptime - Tell how long the system has been running.

#uptime

wKiom1mmYw3hOQWgAAANNB4-vos123.png-wh_50

7.     htop命令:

centos6上没有htop的安装包,我们需要手动配置epel的yum源安装htop;

htop - interactive process viewer:交互式进程查看器

wKioL1mmYwOD43qCAAE97LXM3Uo003.png-wh_50

选项:

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

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

       #htop –u rpc

  wKiom1mmYyjC7Qp2AAAp_wGr3zU846.png-wh_50

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

 

子命令:

  wKiom1mmYz7SZAtNAACRAOpSZGM094.png-wh_50

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

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

  t:以层级关系显示各种进程状态;

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

8.     vmstat命令:

vmstat - Report virtual memory statistics  显示虚拟内存状态

vmstat  [options]  [delay [count]]

wKiom1mmY0qQ6KazAAAaIoVvoo8069.png-wh_50

proc

  r:等待运行的进程运行的任务队列的长度;

  b;处于不可中断睡眠态的进程个数;被阻塞的任务队列的长度;

memory

  swpd:交换内存使用总量;

  free:空闲的物理内存总量;

  buffer:用于buffer的内存的总量;

  cache:用于cache的内存总量;

swap

  si:数据进入swap中的数据速率(kb/s)

  so:数据离开swap的速率(kb/s)

io

  bi:从块设备读入数据到系统的速度(kb/s)

           bo:保存数据至块设备的速率(kb/s)

      system

           in:interrupts,中断速率;

           cs:context switch,上下文切换的速率;

      cpu

           us:user space;

           sy:system;

           id:idle;

           wa:wait;

           st:stolen;

      选项:

           -s:显示内存统计数据;

           wKiom1mmY3LTjM90AABP1I66GOY142.png-wh_50

      #vmstat 2 6          每两秒显示一次,显示六次退出;

      wKiom1mmY4exsQdQAAAwhwHPGV4372.png-wh_50

9.     pmap命令:

pmap - report memory map of a process显示一个进程的内存映射

pmap [options] pid [...]

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

wKiom1mmY5bz7IvDAADpP1xzz2M538.png-wh_50

另一种查看方式:cat /proc/PID/maps

wKioL1mmY5GyJGTsAAGY_05nifM852.png-wh_50

10.glances命令:

glances - A cross-platform curses-based monitoring tool      一个跨平台的多视窗根基的监控工具

glances [-bdehmnrsvyz1]  [-B  bind] [-c  server]  [-C conffile] [-p port] [-P password]

       [--password] [-trefresh] [-f file] [-o output]

#glances

wKioL1mmY6HyiU-SAADep0XlKMY381.png-wh_50

按“h”帮助选项:

wKiom1mmY8XBnF16AAB00J4n30A377.png-wh_50

常用选项:

  -b:以byte为单位显示网上数据速率;

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

  -m:关闭mount模块;

  -t #:刷新时间间隔;

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

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

  -f /PATH/TO/SOMEWHERE:设定输出文件的位置;

C/S模式下运行glances命令:

  服务模式:

       glances –s -BIPADDR

       IPADDR:本机的某地址,用于监听;

  wKioL1mmY7_jqSuZAAANgCQlK8w458.png-wh_50

  客户端模式:

       glances –c IPADDR

       IPADDR:是远程某服务器的地址;

  wKiom1mmY9_itlwhAADY1e8lU3Y510.png-wh_50

11.dstat命令:

- versatile tool for generating system resource statistics    显示系统资源状态的通用工具

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

wKioL1mmY9nRkS7cAAApHaQ1ZtA039.png-wh_50

常用选项:

  -c, --cpu:显示cpu相关信息;

  wKioL1mmY-6Tpi_7AAAR_iqVEFY865.png-wh_50

       -C #,#,…,total

  -d,--disk:显示磁盘的相关信息;

  wKioL1mmZBqT44aWAAAMpBraKmM837.png-wh_50

       -D sda,sdb,…,total

       wKiom1mmZDuxpvHeAAApDNhbUgU464.png-wh_50

  -g:显示page相关的速率数据;

  -m:memory的相关统计数据;

  wKiom1mmZE-TrTOtAAAVG9S7a7Q444.png-wh_50

  -n:interface的相关统计数据;

  wKioL1mmZEnw1KZYAAAO9CjoMB4532.png-wh_50

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

  wKiom1mmZHLRFTR2AAAN6XDUZh4688.png-wh_50

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

  wKiom1mmZI3A86HVAAAMRzB7S70709.png-wh_50

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

  wKiom1mmZLrwWWujAAANBT64P5k444.png-wh_50

  -y:显示系统相关数据,包括中断和进程切换;

 

  --tcp:显示tcp的相关数据

  --udp:显示udp的相关数据

  --raw:显示raw的相关数据

  --socket:显示套接字的相关数据

  --ipc:显示进程通信相关的速率数据

  wKiom1mmZMvxzFNDAAAMVr8DBMY708.png-wh_50

  --top-cpu:显示最占用cpu的进程;

  wKioL1mmZMHgIaHAAAAQaGUKsYo050.png-wh_50

  --top-io:最占用io的进程;

  --top-mem:最占用内存的进程;

  --top-lantency:延迟最大的进程;

      用于向进程发送信号,以实现对进程的管理;

      显示当期系统可用信号:

12.kill 命令:

kill- terminate a process

用于向进程发送信号,以实现对进程的管理;

显示当期系统可用信号:

           kill –l [signal]

          wKiom1mmZO3BJRSlAABUSRNBPS0951.png-wh_50

            每个信号的标识有三种:

1)         信号的数字标识;

2)         信号的完整名称;

3)         信号的简写名称;

向进程发送信号:

  kill  [-s signal|-SIGNAL]  pid...

  常用信号:

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

2)         SIGINT:终止正在运行的进程,相当于ctrl+c;

9)         SIGKILL:杀死运行中的进程;

15)     SIGTERM:中止正在运行中的进程;

18)     SIGCONT:继续运行指定进程;

19)   SIGSTOP:暂停进程;

示例:启用httpd服务,对此进程进行管理;

1.     启用httpd服务,检查80端口是否处于监听状态。

wKioL1mmZP2BI6PCAABbIsXA-b0118.png-wh_50

2.     查看httpd进程;

wKiom1mmZSiwpsKGAAA_sQVWgI8862.png-wh_50

3.     杀死运行中的pid为3099的进程,并查看结果;

#kill -9 3099

wKioL1mmZSiCwC0KAAA2no3JDLM060.png-wh_50

4.     默认信号为15,用下面的方法可以中止信号;

wKioL1mmZT3DkqaJAAA6XU_396s701.png-wh_50

或者

wKiom1mmZZCDbD8uAAA01tgFEMk854.png-wh_50

13.kllall命令:

killall - kill processes by name

killall  [-SIGNAL]  program

示例:禁用httpd服务;

wKioL1mmZYegxjanAAAQrO7TLsQ922.png-wh_50

Linux系统作业控制:

job

前台作业(foregroud):通过终端启动后,且启动后会一直占据终端;

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

 

如何让作业运行于后台?

1)运行中的作业

Ctrl+z

wKiom1mmZabC5C-5AAAqJevQUO8308.png-wh_50

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

2)尚未启动的作业

#COMMAND &

wKioL1mmZZuSKcjFAAAIXMXJLBc406.png-wh_50

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

      #nohup COMMAND &

查看所有作业:

#jobs

wKioL1mmZabRCLfBAAAQ3t1L77g238.png-wh_50

可实现作业控制的常用命令:

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

wKiom1mmZcSCxRbjAADJtvtOeTY572.png-wh_50

# bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行;但是此作业必须支持后台运行;

wKiom1mmZdGT3wliAAAH23TsTGU139.png-wh_50

# kill %JOB_NUM:终止指定的作业,kill作业号的%不可以省略;

wKioL1mmZcjwIfryAAAaHS1xXGU417.png-wh_50

调整进程的优先级:

可通过nice值调整的优先级范围:100-139;

      分别对应于:-20,19

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

nice命令:

      以指定的nice值启动并运行命令

            # nice  [OPTION] [COMMAND [ARGU]...]

            选项:

                  -n NICE

      注意:仅管理员可调低nice值;


renice命令:

            # renice  [-n] NICE  PID...

           

      查看Nice值和优先级:

            ps  axo  pid, ni, priority, comm 




本文转自 claude_liu 51CTO博客,原文链接:http://blog.51cto.com/claude666/1961098,如需转载请自行联系原作者
相关文章
|
22天前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
78 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
1天前
|
缓存 监控 Linux
linux进程管理万字详解!!!
本文档介绍了Linux系统中进程管理、系统负载监控、内存监控和磁盘监控的基本概念和常用命令。主要内容包括: 1. **进程管理**: - **进程介绍**:程序与进程的关系、进程的生命周期、查看进程号和父进程号的方法。 - **进程监控命令**:`ps`、`pstree`、`pidof`、`top`、`htop`、`lsof`等命令的使用方法和案例。 - **进程管理命令**:控制信号、`kill`、`pkill`、`killall`、前台和后台运行、`screen`、`nohup`等命令的使用方法和案例。
19 4
linux进程管理万字详解!!!
|
1天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
3天前
|
消息中间件 存储 Linux
|
9天前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
10 1
|
17天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
64 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
21天前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
【10月更文挑战第9天】本文将深入浅出地介绍Linux系统中的进程管理机制,包括进程的概念、状态、调度以及如何在Linux环境下进行进程控制。我们将通过直观的语言和生动的比喻,让读者轻松掌握这一核心概念。文章不仅适合初学者构建基础,也能帮助有经验的用户加深对进程管理的理解。
16 1
|
26天前
|
消息中间件 Linux API
Linux c/c++之IPC进程间通信
这篇文章详细介绍了Linux下C/C++进程间通信(IPC)的三种主要技术:共享内存、消息队列和信号量,包括它们的编程模型、API函数原型、优势与缺点,并通过示例代码展示了它们的创建、使用和管理方法。
22 0
Linux c/c++之IPC进程间通信
|
26天前
|
Linux C++
Linux c/c++进程间通信(1)
这篇文章介绍了Linux下C/C++进程间通信的几种方式,包括普通文件、文件映射虚拟内存、管道通信(FIFO),并提供了示例代码和标准输入输出设备的应用。
17 0
Linux c/c++进程间通信(1)
|
26天前
|
Linux C++
Linux c/c++之进程的创建
这篇文章介绍了在Linux环境下使用C/C++创建进程的三种方式:system函数、fork函数以及exec族函数,并展示了它们的代码示例和运行结果。
28 0
Linux c/c++之进程的创建