走进Linux——系统进程管理

 

进程是已启动的可执行程序的运行实例,进程有以下组成部分:

* 已分配内存的地址空间;

* 安全属性,包括所有权凭据和特权;

* 程序代码的一个或多个执行线程;

* 进程状态。

  程序:二进制文件,静态/usr/bin/passwd,/usr/sbin/useradd

  进程:是程序运行的过程,动态,有生命周期及运行状态。

父进程复制自己的地址空间(fork)创建一个新的(子)进程结构。

每个新进程分配一个,唯一的进程ID(PID),满足跟踪安全性之需。任何进程都可以创建子进程。

所有进程都是第一个系统进程的后代;

Centos5/6系统进程:init  Centos系统进程:systemd


一、进程管理

  1. 静态查看进程ps

  ps(process status)—进程状态

  pa a -显示现行终端机下的所有程序;ps u 以用户为主的格式来显示程序状况;ps x 不以终端机来区分。

 

 ps aux 输出的字段含义:

USER--运行进程的用户;PID--进程ID %CPU--CPU占用率;

%MEM---内存占用率; VSZ--占用虚拟内存;RSS--占用实际内存;     TTY--进程运行的终端;STAT--进程状态;START--进程的启动时间

TIME---进程占用CPU的总时间;COMMAND--进程文件,进程名

STAT---R:运行;S:睡眠; T:停止的进程;Z:僵尸进程;X:死掉的进程。 

进程排序:ps aux --sort  %cpu  ---(可升序或者降序)

以CPU占比降序排列(减号是降序)

[[email protected] ~]# ps aux --sort -%cpu

[[email protected] ~]# ps aux --sort %cpu

进程的父子关系:ps -ef

查看进程的父子关系。 请观察PID和PPID

[[email protected] ~]# ps -ef

UID         PID   PPID  C STIME TTY          TIME CMD

root          1      0  0 1月22 ?       00:00:07 /usr/lib/systemd/systemd

root          2      0  0 1月22 ?       00:00:00 [kthreadd]

root          3      2  0 1月22 ?       00:00:06 [ksoftirqd/0]

     自定义显示字段:ps axo

      [[email protected] ~]# ps axo user,pid,ppid,%mem,command |head -3

root 8310 1 0.1 /usr/sbin/httpd

apache 8311 8310 0.0 /usr/sbin/httpd

apache 8312 8310 0.0 /usr/sbin/httpd

  1. 动态查看进程top

动态查看进程 top,像windows的任务管理器

[[email protected] ~]# top          //回车,立刻刷新。按z彩色显示,按F,通过光标设置列的顺序。

[[email protected] ~]# top -d 1   //每1秒刷新。

[[email protected] ~]# top -d 1 -p 10126 查看指定进程的动态信息

[[email protected] ~]# top -d 1 -p 10126,1    查看10126和1号进程

  1. 使用信号控制进程kill

   信号的种类

       给进程发送信号(kill  -l 列出所有支持的信号)

       [[email protected] ~]# kill -l

          编号            信号名

          1               SIGHUP    ----重新加载配置

          2               SIGINT    ----键盘中断(Ctr+C)

          3               SIGQUIT   -----键盘退出Ctr+\,类似SIGINT

          9               SIGKILL    -------强制终止,无条件

          15              SIGTERM   -----终止(正常结束),缺省信号

          18              SIGCONT    ----继续

          19              SIGSTOP      -----暂停

          20               SIGTSTP      -------键盘停Ctr+Z

*创建2个文件,查看终端号。

[[email protected] ~]# touch file1 file2

 

** 通过一个终端,打开一个vim

[[email protected] ~]# vim file1

 

***通过另一个终端,打开一个vim

[[email protected] ~]# vim file2

 

**** 通过另一个终端,查询两个进程。

[[email protected] ~]# ps aux |grep vim

root 4362 0.0 0.2 11104 2888 pts/1 S+ 23:02 0:00 vim file1

root 4363 0.1 0.2 11068 2948 pts/2 S+ 23:02 0:00 vim file2

 

****发送信号15 和信号9 ,观察两个终端程序状态。

[[email protected] ~]# kill  -15 4362

[[email protected] ~]# kill -9 4363

观察两个终端,一个正常终止,一个非法杀死。

  

4、进程优先级nice

     Linux进程调度及多任务,每个CPU在一个时间点上只能处理一个进程,通过时间片技术,来同时运行多个程序。

  在top中显示的优先级有 PR值和nice值

      NI:实际nice值,nice值越大,优先级越低,反之nice值越小,优先级越高。

      PR(+20):将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39。

     查看进程的nice级别:ps axo pid,command,nice---sort=nice

 

手动启动不同nice

[[email protected] ~]# nice -n -5 sleep 6000 &

[1] 2220

[[email protected] ~]# nice -n -10 sleep 7000 &

[2] 2229

[[email protected] ~]# ps axo command,pid,nice | grep sleep

sleep 6000                    2220  -5

sleep 7000                    2229 -10

grep --color=auto sleep       2233   0

更改现有进程的nice级别

使用shell更改nice级别

(1)创建一个睡眠示例程序。

[[email protected] ~]# sleep 7000 &

[2] 2669

 

(2) 修改他的nice值。

[[email protected] ~]# renice -20 2669

2669 (进程 ID) 旧优先级为 0,新优先级为 -20,观察修旧的nice值。

  • 作业控制jobs

   作业控制是一个命令功能,也叫后台运行;有两个命令:foreground --fg 前台进程:也在终端中运行的命令,占领终端。

Background --bg 后台进程:没有控制终端,它不需要终端的交互,看不见,但是在运行。

   后台程序控制示例

程序占领前台的现象:

运行一个程序,当前终端无法输入,观察占领前台的现象,输入大部分命令行是无效的。Ctrl+c终止进程

运行后台程序例子:

ps查询所有程序

 

jobs查看后台进程

调动后台程序至前台

 消灭后台进程

三、虚拟文件系统proc

   虚拟文件系统:采集服务器自身 内核、进程运行的状态信息

    CPU: /proc/cpuinfo

内存:/proc/meminfo

内核:/proc/cmdline

非常感谢您的阅读!非常感谢您的阅读!