24-linux进程管理(一)

内核的功用:进程管理、文件系统管理、驱动管理,安全管理、网络功能管理

进程(process)是运行中程序的一个副本;

linux内核存储进程信息的固定格式叫task struck结构体(包含标识符、状态、优先级、程序计数器等信息)

进程创建

fork函数是通过clone系统来完成创建进程的。这个调用来标识一下父进程和子进程之间共享的资源。

  1. 调用dup_task_struct()来创建一个内核栈,thread_info,task_struct等结构,一开始的时候其实父进程和子进程里面的资源和里都是一样的,此时子进程与父进程的进程描述符完全一致
  2. check 检查当前进程是否已经超过了系统的最大文件描述符
  3. 清除子描述符里面一些内容,使它与父进程分开。但是进程描述符不需要去改变就是直接复制就好了,因为主要起的是描述作用,而不是记录的作用
  4. 设置标志位,TASK_UNINTERRUPTIBLE 来保证该进程不会被投入使用
  5. copy-flags()用来更新struct_task的一些flags成员,
  6. get_pid()给进程一个pid号
  7. 根据传递给clone的参数标志,copy_process函数拷贝或共享打开文件,文件系统信息等、信号处理函数、进程地址空间和命名空间
  8. 让父进程和子进程平分剩余的时间片
  9. 最后copy_process会返回一个指向子进程的指针

进程优先级(1-139级)

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

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

进程的优先级(100-139)可通过调整nice值来设定其优先级,其中nice值-20,19分别对应进程优先级的100,139;

进程内存

page frame页框用于存储页面数据和进程数据

进程类型

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

前台(交互式)进程:跟终端有关,通过终端启动的进程

注意:可以把交互式进程手动送往后台,以守护模式运行

进程状态

运行态:running

就绪态:ready

睡眠态:

    可中断(interruptable):进程可由就绪态立即调度运行

    不可中断(uninterruptable):当进程运行时需进行额外数据加载,且加载数据很大时,数据需从磁盘中IO至内核内存中,并最终IO至进程内存后才能由进程进行调度处理。由于数据加载过程可能需要的时间较长,因此无法进行中断;

停止态(stopped):进程暂停于内存中,且不会被调用,除非手动启动之

僵死态(zombie):进程执行完成后,结束需由父进程将子进程做删除处理时的状态

注意:僵死态如果父进程丢失,无法删除子进程时,将由init处理

linux系统上的进程查看及管理工具:pstree,ps,top,htop,glances,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup

/sbin/init:所有用户进程都是由init管理并发送至内核处理

pstree命令

pstree - display a tree of processes 显示进程树

init─┬─auditd───{auditd}
     ├─crond
     ├─master─┬─pickup
     │        └─qmgr
     ├─6*[mingetty]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd───sshd───bash───pstree
     └─udevd───2*[udevd]

ps命令

ps - report a snapshot of the current processes.显示当前命令执行时的进程状态,与查看/proc目录下进程文件数据显示出来的结果一致

/proc/目录:内核的状态信息文件

    内核参数:

      可设置其值从而调整内核运行特性的参数,/proc/sys/目录

[root@centos-6 ~]# ll /proc/sys
total 0
dr-xr-xr-x 0 root root 0 Oct 25 16:34 abi
dr-xr-xr-x 0 root root 0 Oct 25 13:15 crypto
dr-xr-xr-x 0 root root 0 Oct 25 16:34 debug
dr-xr-xr-x 0 root root 0 Oct 25 16:34 dev
dr-xr-xr-x 0 root root 0 Oct 25 13:15 fs
dr-xr-xr-x 0 root root 0 Oct 25 13:15 kernel
dr-xr-xr-x 0 root root 0 Oct 25 13:15 net
dr-xr-xr-x 0 root root 0 Oct 25 13:15 vm

     状态变量:其用于输出内核中统计信息或状态信息,仅用于查看

     参数:模拟成文件系统类型

进程文件位置:/proc/#,#为PID

启动进程的方式:

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

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

ps a:显示所有与终端相关的进程

ps u:显示所有以用户为中心进程状态信息

ps x:显示所有与终端无关的进程

[root@centos-6 ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  19232  1496 ?        Ss   13:15   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    13:15   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    13:15   0:00 [migration/0]
root         4  0.0  0.0      0     0 ?        S    13:15   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S    13:15   0:00 [stopper/0]
root         6  0.0  0.0      0     0 ?        S    13:15   0:00 [watchdog/0]
root         7  0.0  0.0      0     0 ?        S    13:15   0:00 [migration/1]

VSZ:虚拟内存集

%CPU:CPU占比

%MEM:内存占比

RSS:常驻内存集,指的是不能放到交换内存中的数据

STAT:当前进程的状态

  R:running

  S:interruptable sleeping 可中断睡眠

  D:uninterruptable sleeping 不可中断睡眠

  T:stopped 停止态

  Z:zombie 僵死态

  +:前台进程(运行在终端上的)

  l:多线程进程

  N:低优先级进程

  <:高优先级进程

  s:session leader,会话领导者,相当于父进程

ps -e 显示所有进程

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

ps -F 显示完整格式的进程信息,比-f更详细

[root@Centos-7-24 1]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 09:38 ?        00:00:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0 09:38 ?        00:00:00 [kthreadd]
root          4      2  0 09:38 ?        00:00:00 [kworker/0:0H]
root          5      2  0 09:38 ?        00:00:00 [kworker/u256:0]
root          6      2  0 09:38 ?        00:00:00 [ksoftirqd/0]
PPID:父进程ID
C:CPU占用率
CMD:启动此进程的命令
[root@Centos-7-24 1]# ps -eF
UID         PID   PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root          1      0  0 48463  6980   3 09:38 ?        00:00:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0     0     0   0 09:38 ?        00:00:00 [kthreadd]
root          4      2  0     0     0   0 09:38 ?        00:00:00 [kworker/0:0H]
root          5      2  0     0     0   3 09:38 ?        00:00:00 [kworker/u256:0]
root          6      2  0     0     0   0 09:38 ?        00:00:00 [ksoftirqd/0]
PSR:运行在那个CPU上
-H:以层级结构显示进程的相关信息
ps常用组合:ps -eFH,-eo,-axo
-o:算定义要显示的字段,以逗号分隔
常用字段:field,pid,ni,pri,psr,pcpu,stat,comm,tty,ppid,rtprio
ni:nice值
pri:priority优先级
rtprio:实时优先级
[root@Centos-7-24 1]# ps -axo pid,command
  PID COMMAND
    1 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
    2 [kthreadd]
    4 [kworker/0:0H]
    5 [kworker/u256:0]
    6 [ksoftirqd/0]
pgrep ,pkill命令
 pgrep, pkill - look up or signal processes based on name and other attributes
 pgrep [options] pattern
pgrep:进程过滤
pkill:根据进程的名字或其它属性来查询进程或向进程发送信号,如发送结束进程信号
pgrep -u uid:显示指定用户的进程
pgrep -U uid:进程由谁启动
[root@Centos-7-24 1]# pgrep -U postfix
1523
4548
pgrep -t terminal:与指定的终端相关的进程
pgrep -l:显示进程名
[root@Centos-7-24 ~]# pgrep -l cron
1044 crond
pgrep -a:显示完整格式的进程名
[root@Centos-7-24 ~]# pgrep -a cron
1044 /usr/sbin/crond -n
pgrep -P pid:显示此进程的子进程
pkill [options] pattern
pidof命令
 pidof -- find the process ID of a running program.
pidof:根据进程名,获取其PID
[root@Centos-7-24 ~]# pidof pidof
3563
top命令:逆序排序显示所有进程
top - display Linux processes
排序方式
  P:以占据CPU百分比排序
  M:以占用内存百分比排序
  T:累计占用CPU时间排序
首部信息
  uptime信息:l命令开启和关闭(第1行)
     task及CPU信处:t命令开启和关闭(第2,3行)
        内存信息:m命令开启和关闭(第4,5行)
退出:q
修改刷新时间:s
终止指定的进程:k
分散显示CPU占用情况:e
选项
top -d#:指定刷新时间,默认为3秒
top -b:以批次方式显示,整页显示,默认3秒一次不会停止
top -n#:显示多少个批次后停止
[root@Centos-7-24 1]# top
top - 20:05:26 up 10:27,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 120 total,   1 running, 119 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.0 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  4026164 total,  3464960 free,   202180 used,   359024 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  3583400 avail Mem
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                        
    1 root      20   0  193852   6980   4160 S   0.0  0.2   0:03.44 systemd                                                                                                        
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.02 kthreadd    
top - 20:05:26:当前时间
up 10:27运行时间长
1 use:登陆当前系统用户数
load average: 0.00, 0.01, 0.05平均负载,过去1分钟,5分钟,15分钟在CPU上平均等待运行的队列长度
Tasks: 120 total:运行进程总数
1 running:多少个处于运行状态
119 sleeping,   0 stopped,   0 zombie:多少个睡眠,多少个停止,多少个僵死
uptme命令:显示系统时间、运行时长及平均负载,和过去1分钟,5分钟,15分钟在CPU上平均等待运行的队列长度
[root@Centos-7-24 1]# uptime
22:15:19 up 12:37,  1 user,  load average: 0.00, 0.01, 0.05
posted @ 2020-10-25 10:01  扬帆直上  阅读(290)  评论(0)    收藏  举报