进 程
1、进程的概念
1、进程是一个程序的一次执行过程。
2、进程是一个可独立调度的任务,是操作系统的最小调度单位。
2、进程和程序的区别
2.1 程序:静态 是一种资源文件 没有执行过程
2.2 进程:动态 有生命周期的 执行过程。
3、进程的特点和分类
3.1 特点:
PID: ===》进程标识符 ===》进程在操作系统中的合法唯一标识。
PPID: ==》父进程的进程标识符 ===》每个进程都有一个父进程。
空间分布: 文本段 静态数据 栈区 堆区
3.2 分类
交互式进程
批处理进程
守护进程
3.3 状态
运行态 等待态 暂停态 僵尸态
状态切换/调整:!!!!!!!!注意所有如下指令都必须在当前终端执行
其他终端中无效
0、xxx & ===》将xxx程序放到后台执行
1、fg 命令 ===》将后台执行的程序放到前台执行。
fg num ==>将指定的任务调度到前台执行
2、bg 命令 ===》将挂起的程序从前台放到后台执行。
bg num ==>将指定的任务调度到后台执行。
3、jobs 命令 ==》查看当前终端的所有进程任务列表。
ctrl+c 停止前台正在运行的程序。
ctrl+z 暂停前台正在运行的程序。
kill 发送信号:
kill -l ===>显示所有系统预置的信号
发送命令: kill -信号编号/信号的宏名称 进程pid
kill -19 12345 ===>给pid是12345的进程发送一个编号
是19 号的信号。
等价于: kill -SIGSTOP 12345
kill 12345 ==> kill -15 12345 ===>终止进程
kill -9 进程pid
killall -9 进程名称
ctrl+z === kill -19 xxx
ctrl+c === kill -2 xxx
top 命令 ===>动态显示进程的排名
默认按照CPU的使用率排序
ps 命令 ===》某一时刻系统中全部进程的任务列表
ps -ef
ps aux
pstree 命令 ===>以树形方式显示所有进程的前后关系
/////////////////////////////////////////////////////////////////
多进程编程:
4、进程的创建fork函数
头文件: unistd.h
函数原型: pid_t fork(void);
功能: 通过该函数可以动态生成一个同名进程。
每次调用fork函数会自动生成一个子进程。
fork之后的子进程与父进程的代码逻辑一致,克隆体。
fork出的新子进程的执行过程从fork之后执行。
参数: 无
返回值: pid_t ===>int
pid >0 pid == 新创建的子进程的pid号,该部分表示父进程空间
pid =0 pid == 当前子进程的进程空间
pid <0 异常,表示创建失败。
辅助函数:
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
功能:获取当前进程自身的pid号
pid_t getppid(void);
功能:获取当前进程父进程pid号
面试题:
如果在主进程中依次fork两次,会生成几个进程
他们之间的关系如何表示,有多少个父进程 子进程 孙进程,
答:共产生4个进程,1父,2子,1孙。
假定当前进程为A,fork(); 产生第一个子进程 A1。fork(); A调
用fork产生它的子进程A2, 前一个子进程A1调用fork再次产生进
程 A11。所有总共产生了3个子进程,分别是 A1, A2, A11。再加A
共四个进程。
作业题:
使用fork函数生成100个子进程,将其中pid号是偶数的进程
的pid号打印输出。