进程管理

127 阅读5分钟

进程与计划任务

内核功能:进程管理、内存管理、文件系统、网络功能、驱动程序、安全功能等

1 程序

保存在硬盘、光盘等介质中的可执行的代码和数据;

文件中静态保存的代码。

2 进程

2.1 什么是进程

运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位,

  • 进程ID(Process ID,PID)号码被用来标记各个进程
  • UID、GID语境决定对文件系统的存取和访问权限
  • 通常从执行进程的用户来继承
  • 存在生命周期
  • 都由其父进程创建

2.2 进程的特征

  • 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
  • 并发性:任何进程都可以同其他进程一起并发执行;
  • 独立性:进程是系统进行资源分配和调度的一个独立单位;
  • 结构性:进程由程序、数据和进程控制块三部分组成。

2.3 进程与线程的区别

资源分配与调度
进程是资源竞争的基本单位;
线程是程序执行的最小单位;

2.4 进程使用内存的问题

内存泄漏:Memory Leak

指程序中用malloc或new申请了一块内存,但是没有用free或delete将内存释放,导致这块内存一直处于占用状态

内存溢出:Memory Overflow

指程序申请了10M的空间,但是在这个空间写入10M以上字节的数据,就是溢出,类似红杏出墙

内存不足:OOM OOM 即 Out Of Memory,“内存用完了”,在情况在java程序中比较常见。系统会选一个进程将之杀死,在日志messages中看到类似下面的提示

Jul 10 10:20:30 kernel: Out of memory: Kill process 9527 (java) score 88 or sacrifice child

当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error,因为这个问题已经严重到不足以被应用处理)。
原因:

  • 给应用分配内存太少
  • 应用用的太多,并且用完没释放,浪费了。

解决方法:

  1. 限制java进程的max heap,并且降低java程序的worker数量,从而降低内存使用
  2. 给系统增加swap空间

2.5 进程状态

  • 运行态:running
  • 就绪态:ready
  • 睡眠态:分为两种,可中断:interruptable,不可中断:uninterruptable
  • 停止态:stopped,暂停于内存,但不会被调度,除非手动启动
  • 僵死态:zombie,僵尸态,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死态 的子进程

3 进程管理

3.1 ps

ps可以查看进程当前状态的快照,默认显示当前终端中的进程。

  • ps aux 可以查看系统中所有的进程
  • ps -le 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级
  • ps -l 只能看到当前 Shell 产生的进程

常用选项

  • a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。
  • u:使用以用户为主的格式输出进程信息。
  • x:显示当前用户在所有终端下的进程信息。
  • -e:显示系统内的所有进程信息。
  • -l:使用长(Long)格式显示进程信息。
  • -f:使用完整的(Full)格式显示进程信
  • k|--sort 属性 对属性排序,属性前加 - 表示倒序 ps aux k -%cpu
  • o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem

image.png

image.png

3.2 top

top 命令可以动态地持续监听进程地运行状态

选项:

  • -d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;

  • -b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;

  • -n 次数:指定 top 命令执行的次数。一般和"-"选项合用;

  • -p 进程PID:仅查看指定 ID 的进程;

  • -s:使 top 命令在安全模式中运行,避免在交互模式中出现错误;

  • -u 用户名:只监听某个用户的进程; 在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作

  • ? 或 h:显示交互模式的帮助;

  • c:按照 CPU 的使用率排序,默认就是此选项;

  • M:按照内存的使用率排序;

  • N:按照 PID 排序;

  • T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;

  • k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;

  • r:按照 PID 给某个进程重设优先级(Nice)值;

  • q:退出 top 命令;

image.png

3.3 pgrep

查看指定进程

  • -U 指定用户
  • -l: 显示进程名
  • -a: 显示完整格式的进程名
  • -P pid: 显示指定进程的子进程

3.4 pstree

以树形结构列出进程信息
pstree [OPTION] [ PID | USER ] 选项

  • -a 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
  • -p 显示PID
  • -T 不显示线程thread,默认显示线程
  • -u 显示用户切换
  • -H pid 高亮显示指定进程及其前辈进程

显示 进程号 image.png 显示 用户

image.png

五大性能

查看五大性能

1. 内存 free top

2. 磁盘  1)剩余量  2)io读写性能

Df lsblk fdisk -l dd iostat vmstat iotop

3. Cpu 使用率  top(实时) ps(静态) 4. 网络 iftop

系统版本: cat /etc/redhat-release

ip地址:  ifconfig

内核版本   uname -r

后台运行

1. 命令 加 & 加入后台

2. Jobs 后台执行的命令

3. Fg 加 编号 把任务调到前台

4. Ctrl +z 把命令放回后台 但是停止状态

5. Bg 加 编号 重新开始 后台任务