进程是一个可执行程序的实例

一、linux系统进程管理

1、进程管理的作用

  • 判断机器健康状态
  • 查看系统中所有进程
  • 杀手进程

2、查看系统进程

1、ps -aux

BSD操作系统格式:

TTY说明:

tty1 - tty7: 本地控制台终端tty1 - tty6: 字符界面终端tty7: 图形终端pts/0 - pts/255: 虚拟终端

START常见状态:

R: 运行
S: 睡眠
D: 不可被唤醒的睡眠状态
Z: 僵尸进程
T: 停止状态
X: 死掉的进程
N: 优先级较低进程
L: 部分页被锁进内存
s: 包含子进程
l: 多线程
+: 位于后台
<: 优先级较高进程

2、ps -le

Linux 标准命令格式:

3、持续监听进程运行状态(top)


第一行任务队列信息

内容 说明
09:39:43 系统当前时间
up 10:38 系统的运行时间,本机己经运行 10 小时 38 分钟
1 user 当前登录了 1 个用户
load average: 0.07, 0.02, 0.00 系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载

第二行进程信息

内容 说明
Tasks: 295 total 系统中的进程总数
1 running 正在运行的进程数
294 sleeping 睡眠的进程数
0 stopped 正在停止的进程数
0 zombie 僵尸进程数。如果不是 0,则需要手工检查僵尸进程

第三行CPU 信息

内容 说明
%Cpu(s): 0.0 us 用户模式占用的 CPU 百分比
0.0 sy 系统模式占用的 CPU 百分比
0.0 ni 改变过优先级的用户进程占用的 CPU 百分比
100.0 id 空闲 CPU 占用的 CPU 百分比
0.0 wa 等待输入/输出的进程占用的 CPU 百分比
0.0 hi 硬中断请求服务占用的 CPU 百分比
0.0 si 软中断请求服务占用的 CPU 百分比
0.0 st st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比

第四行物理内存信息

内容 说明
MiB Mem : 3901.5 total 物理内存的总量
2538.2 free 空闲的物理内存数量
560.5 used 己经使用的物理内存数量
802.7 buff/cache 作为缓冲的内存数量

第五行交换分区(swap)信息

内容 说明
MiB Swap: 923.3 total 交换分区(虚拟内存)的总大小
923.3 free 空闲交换分区的大小
0.0 used 已经使用的交换分区的大小
3097.2 avail Mem 作为缓存的交换分区的大小

缓冲(buffer)和缓存(cache)的区别:

  • 缓存(cache)是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中读取。
  • 缓冲(buffer)是在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。

简单来说,缓存(cache)是用来加速数据从硬盘中"读取"的,而缓冲(buffer)是用来加速数据"写入"硬盘的。

第六行主要是系统进程信息,各个字段的含义如下:

内容 说明
PID 进程的 ID
USER 该进程所属的用户
PR 优先级,数值越小优先级越高
NI 优先级,数值越小、优先级越高
VIRT 该进程使用的虚拟内存的大小,单位为 KB
RES 该进程使用的物理内存的大小,单位为 KB
SHR 共享内存大小,单位为 KB
S 进程状态
%CPU 该进程占用 CPU 的百分比
%MEM 该进程占用内存的百分比
TIME+ 该进程共占用的 CPU 时间
COMMAND 进程的命令名

4、查看进程树(pstree)

5、终止进程

二、进程和程序

程序包含一系列信息文件,这些信息描述如何在运行时创建一个进程,所包含内容如下:

  • 二进制格式标志:每个程序文件都包含用于描述可执行文件格式的元信息。内核利用此信息来解释文件中的其他信息。
  • 机器语言指令:对程序算法进行编码。
  • 程序入口地址:程序开始执行时的起始指令位置。
  • 数据:程序文件包含的变量初始值和程序的字面常量。
  • 符号表和重定位表:描述程序中函数和变量的位置及名称。
  • 共享库和动态链接信息
  • 其他信息:用于描述如何创建进程。

可以用一个程序来创建许多进程。

进程:由内核定义的抽象实体,并为该实体分配用于执行程序的各项系统资源。

内核角度看,进程用户内存空间一系列内核数据结构组成。

  • 用户空间:包含程序代码及代码所使用的变量。
  • 内核数据结构:用于维护进程状态信息。

三、进程号和父进程号

每个进程都有一个进程号(PID),进程号是一个正数,用以标识系统中的某个进程。

1、getpid()

#include <sys/types.h>
#include <unistd.h>pid_t getpid(void);

1、参数

2、返回值

返回类型为 pid_t 的进程号

2、getppid()

#include <sys/types.h>
#include <unistd.h>pid_t getppid(void);

1、参数

2、返回值

返回类型为 pid_t 的父进程号

如果子进程的父进程终止,则子进程就会变成“孤儿”,init 进程随即将收养该进程,子进程后续对 getppid() 的调用将返回进程号 1。

四、/proc 文件系统

1、/proc/PID


对于每个进程,内核都提供了相应的目录,命名为 /proc/PID,其中PID是进程的ID。在此目录中的各种文件和子目录包含了进程的相关信息。

每个 /proc/PID 目录中都存在一个命名为 status 的文件,提供了有关进程的一系列信息。

该文件格式随着时间推移不断演变。

/proc/PID 目录中的部分文件:

1、/proc/PID/fd


/proc/PID/fd 目录为进程打开的每个文件描述符都包含一个符号链接,每个符号链接的名称都与描述符数值相匹配

2、/proc/PID/task

针对进程指令的每个线程,内核提供了以/proc/PID/task/TID命名的子目录,其中TID时该线程的线程ID

每个/proc/PID/task/TID子目录中都有一套类似于/proc/PID目录内容的文件和目录。因为线程共享了多个属性,所以这些文件中的许多信息堆进程中各个线程而言都是相同的。

2、/proc 目录下的系统信息

/proc 目录下的各种文件系统和子目录提供了对系统级信息的访问。

3、访问 /proc 文件

通常使用 shell 脚本访问 /proc 目录下文件。也可以从程序中使用常规 I/O 系统调用访问 /proc 目录下的文件。但在访问这些文件时,有如下一些限制。

  • /proc 目录下的一些文件是只读的,即这些文件仅用于显示内核信息,但无法对其进行修改。/proc/PID 目录下的大多数文件就属于此类型。
  • /proc 目录下的一些文件仅能由文件拥有者(或特权进程)读取。
  • 除了 /proc/PID 子目录中的文件,/proc 目录的其他文件大多属于 root 用户,并且也仅有 root 用户能够修改那些可修改的文件。

1、访问 /proc/PID 目录中的文件

/proc/PID 目录内容变化不定。每个目录随着进程创建而创建,随着进程的终止而灭。

五、系统标识:uname()

uname() 系统调用返回一系列关于主机系统的标识信息

1、uname命令

uname [-amnrsv][--help][--version]

参数:

  • a或–all  显示全部的信息。
  • -m或–machine  显示电脑类型。
  • -n或–nodename  显示在网络上的主机名称。
  • -r或–release  显示操作系统的发行编号。
  • -s或–sysname  显示操作系统名称。
  • -v  显示操作系统的版本。
  • -p或–processor  输出处理器类型或"unknown";
  • -i或–hardware-platform  输出硬件平台或"unknown";
  • -o或–operating-system  输出操作系统名称;
  • –help  显示帮助。
  • –version  显示版本信息。

2、uname() 系统调用

#include <sys/utsname.h>int uname(struct utsname *buf);
struct utsname {char sysname[];    /* Operating system name (e.g., "Linux") 操作系统名称 */char nodename[];   /* Name within "some implementation-defined network" 网络中名称 */char release[];    /* Operating system release (e.g., "2.6.28") 操作系统发行编号 */char version[];    /* Operating system version 操作系统版本 */char machine[];    /* Hardware identifier 硬件标识符 */
#ifdef _GNU_SOURCEchar domainname[]; /* NIS or YP domain name NIS 或 YP 域名 */
#endif
};

SUSv3 规范了 uname(),但对 utsname 结构中各种字段的长度未加定义仅要求字符串以空字节终止

utsname 结构中的 sysnamereleaseversionmachine 字段由内核自动设置。

utsname 结构中的 nodename 字段由 sethostname() 系统调用设置。

utsname 结构中的 domainname 字段由 setdomainname() 系统调用设置。

Linux/Unix系统编程 五:进程相关推荐

  1. linux/unix系统编程手册11-15

    title: linux/unix编程手册-11_15 date: 2018-05-27 11:53:07 categories: programming tags: tips linux/unix编 ...

  2. Linux/Unix系统编程手册 第三章:系统编程概念

    本章介绍系统编程的基础概念和一些后续章节用到的函数及头文件,并说明了可移植性问题. 系统调用是受控的内核入口,通过系统调用,进程可以请求内核以自己的名义去执行某些动作,比如创建子进程,执行I/O操作, ...

  3. Linux/UNIX系统编程手册gg

    Linux系统: "所见皆文件" 一个比较好的博客 一.Linux基础操作 Linux系统目录: bin:存放二进制可执行文件 boot:存放开机启动程序 dev:存放设备文件: ...

  4. Liunx系统编程篇—进程通信(五)信号

    Liunx系统编程篇-进程通信(五)信号 原理 对于Linux,信号是软中断,例如下课铃响了,老师要停止讲课.许多重要的程序都需要处理信号. 信号,为 Linux 提供了一种处理异步事件的方法.比如, ...

  5. linux中daemonize用法,daemonize Unix系统后台守护进程管理软件

    在我们的工作中,很多时候都需要在linux中后台运行程序, 方法1: nohup & 方法2: daemonize Unix系统后台守护进程管理软件 优点:更加正规 后台运⾏更稳定 git c ...

  6. vbs结束进程代码_物联网学习教程—Linux系统编程之进程控制

    Linux系统编程之进程控制 一.结束进程 首先,我们回顾一下 C 语言中 continue, break, return 的作用: continue: 结束本次循环 break: 跳出整个循环,或跳 ...

  7. Linux系统编程之进程与线程控制原语对比

    Linux系统编程之进程与线程控制原语对比 进程 线程 fork pthread_create exit pthread_exit wait pthread_join kill pthread_can ...

  8. 【Linux系统编程】进程替换:exec 函数族

    00. 目录 文章目录 00. 目录 01. exec函数族 02. 参考示例 2.1 execl函数示例 2.2 execv函数示例 2.3 execlp() 或 execvp()函数示例 2.4 ...

  9. 【Linux系统编程】进程概述和进程号

    00. 目录 文章目录 00. 目录 01. 进程概述 02. 进程状态 03. 进程控制块 04. 进程号 05. 进程号相关函数 06. 案例实战 07. 附录 01. 进程概述 我们平时写的 C ...

最新文章

  1. linux 服务器安装字体
  2. 20+ Rsync command’s switches and common usages with examples – Unix/Linux--reference
  3. ContestHunter暑假欢乐赛 SRM 08
  4. mysql查询语句在哪里编写_mysql编写语句:更新查询
  5. 在VS2012中安装使用cppcheck
  6. 阿里巴巴Dubbo实现的源码分析
  7. 单片机特殊功能寄存器
  8. 【python】装饰器的练习题
  9. (图文)HBASE的知识点以及工作原理的详细解释--架构
  10. 中国索马杜林药市场趋势报告、技术动态创新及市场预测
  11. java随机数_Java随机
  12. 谨防!黑客是这样偷窥你的智能手机
  13. Ansys-自适应网格划分-受压薄板学习收获
  14. 【模式识别】信号检测实验及MATLAB仿真
  15. 关于人工智能的定义,这篇文章定义比较全面了
  16. 【tomcat运行异常】Error running ‘*** [org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:run]‘
  17. 甄别客户需求,提高解决问题的效率
  18. Windows时钟同步问题
  19. 阅读 redis 源码,学习缓存淘汰算法 W-TinyLFU
  20. 【Virus Analysis】插入Unicode控制字符-RLO

热门文章

  1. 会计基础(1) - 总论
  2. 树莓派siri homekit_HomeBridge 操作指南:从零开始,将你的米家设备接入 Homekit
  3. 局域网内补丁更新80072EE2错误
  4. 全志A13芯片处理器参数介绍
  5. 《追风筝的人》书摘与笔记
  6. 十种最神奇的快速减肥偏方
  7. TPA4045-ASEMI光伏防回流二极管TPA4045
  8. 极客日报:小鹏汽车回应非法收集人脸数据被罚10万;OPPO发布首颗自研芯片马里亚纳X;AMD 3DNow指令集被Linux淘汰
  9. tomcat里设置session过期时间
  10. Qt仿Android带特效的数字时钟源码分析(滑动,翻页,旋转效果)