目录
Linux之进程
进程简介
定义
进程是程序的一次执行。进程是可以并行执行的计算。进程是一个程序与其使用的数据在处理机上顺序执行时发生的活动。进程是程序在一个数据集合上的运行过程。它是系统进行资源分配和调度的一个独立单位
组成部分
- 已分配内存的地址空间
- 安全属性,包含所有全凭根和特权
- 程序代码的一个或多个执行线程
- 进程状态
程序与进程的区别
程序 --- 二进制文件 ,静态 /bin/date, /usr/sbin/httpd , /usr/sbin/sshd, /usr/local/nginx/sbin/ngi
进程 --- 是程序运行的过程,动态,有生命周期及运行状态
- 程序是静态的,它只是一组指令的集合,不具有任何的运行意义,而进程是程序运行的动态过程
- 进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程
- 进程还具有并发性和交往性,而程序却是封闭的
进程与线程的区别
线程 --- 进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行
- 一个进程可以拥有多个线程,而一个线程只能被一个进程所拥有
- 线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及序列出口,它必须组成进程才能被执行
父子进程
子进程 --- 由一个进程所产生的进程,产生这个子进程的进程称为父进程
在Linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境
父进程终止子进程自然终止
前台进程和后台进程
前台进程 --- 在 shell 提示处理打入命令后,创建一个子进程,运行命令, Shell 等待命令退出,然后返回到对用户给出提示符。这条命令与 Shell 异步运行,即在前台运行,用户在它完成之前不能执行别一个命令
后台进程 --- 在 Shell 提示处理打入命令,若后随一个 &, Shell 创建子进程运行此命令,但不等待命令退出,而直接返回到对用户给出提示。这条命令与 Shell 同步运行,即在后台运行。“后台进程必须是非交互式的
进程分类
进程的状态
在 多任务 处理操作系统中,每个CPU (或核心)在 一个时间点 上 只能处理一个进程 。在进程运行时,它对 CPU时间 和 资源分配 的要求会 不断变化 ,从而 为进程分配一个状态 ,它 随着环境要求而改变
查看进程
查看当前系统信息 --- ww
[root@joker ~]# w
查看个别用户信息 --- w [用户名]
[root@joker ~]# w root
静态查看进程 --- ps
参数及作用
参数 | 作用 |
-a | 显示所有用户的进程 |
-u | 显示用户名和启动时间 |
-x | 显示没用控制终端的进程 |
-e | 显示所有进程,包括没有控制终端的进程 |
-l | 长格式显示 |
-w | 宽行显示,可以使用多个w进行加宽显示 |
查看隶属自己的进程
- ps -u or-l 查看隶属于自己进程的详细信息
- ps -le or-aux 查看所有用户执行的进程的详细信息
- ps -aux -sort pid 可按进程执行的时间、PID、UID等对进程进行排序
信息含义解析
案例
通过内存升序排序,并分页查看
[root@joker ~]# ps aux --sort rss |less
通过内存降序排序,并分页查看
[root@joker ~]# ps aux --sort -rss |less
通过CPU升序排序,并分页查看
[root@joker ~]# ps aux --sort %cpu |less
通过CPU降序排序,并分页查看
[root@joker ~]# ps aux --sort -%cpu |less
常用操作
自定义查看显示字段
[root@joker ~]# ps axo user,pid,ppid,%mem,command |less
查看进程树
[root@joker ~]# pstree
查看指定进程的PID
[root@joker ~]# cat /run/sshd.pid
查看服务进程号
pgrep [ 服务名称 ]
[root@joker ~]# pgrep -l sshd
[root@joker ~]# pgrep sshd
pidof [ 服务名称 ]
[root@joker ~]# pidof sshd
动态查看进程 --- top
[root@joker ~]# top
第一部分解析
主要是系统整体信息统计
第二部分详解
命令及作用
命令 | 作用 |
h|? | 帮助 |
M |
按 内存的使用 排序 |
P |
按 CPU使用 排序 |
N | 以PID的大小排序 |
R | 对排序进行反转 |
f | 自定义显示字段 |
1 | 显示所有CPU的负载 |
< |
向前 |
> | 向后 |
z | 色彩 |
W | 保存top环境设置 |
nohup命令
可以在用户退出时继续执行某一进程
一般的命令 在 用户退登录 后就 停止执行 了, nohup 命令可以 使进程 在 用户退出登录 后 仍旧继续执行 ,nohup 命令将执行后的数据信息和错误信息默认 存储到文件 nohup.out 中
语法格式
nohup program &
信号控制将进程
列出所有支持的信号
[root@joker ~]# kill -l
进程相关命令及其功能
作业控制
定义
作业控制 --- 一个命令行功能,允许一个shell 实例来 运行 和 管理 多个命令,Shell的一个特性,使用户能在多个独立进程间进行切换
命令及作用
命令 | 作用 |
cmd& | 该命令在后台运行 |
Ctrl+d | 终止一个正在前台运行的进程(含有正常含义) |
Ctrl+c | 终止一个正在前台运行的进程(含有强行含义) |
Ctrl+z | 挂起一个正在前台运行的进程 |
jobs | 显示后台作业和被挂起的进程 |
bg | 重新启动一个挂起的作业,并在后台运行 |
fg | 把一个在后台运行的作业放到前台运行 |
作业标识符及作用
标识符 | 作用 |
%N | 第N号作业 |
%S | 以字符串S开头的被命令行调用的作业 |
%?S | 包含字符串S的被命令行调用的作业 |
%+ | 默认作业(前台最后结束的作业,或后台最后启动的作业,等同于%%) |
%- | 第二默认作业 |
案例
示例1 --- 运行程序(时),让其在后台
[root@joker ~]# sleep 3000 &
示例2 --- 查看后台挂起
[root@joker ~]# ps aux |grep sleep
示例3 --- 查看后台作业
[root@joker ~]# jobs
示例4 --- 将作业1调回到前台
[root@joker ~]# fg %1
示例5 --- 终止PID为1的进程
[root@joker ~]# kill %1