多进程编程:
程序概念:资源与代码文件的有序集合。
进程概念:进程是一个抽象实体,它是程序的一次执行过程。
进程与程序的区别:
1、进程是动态的
程序是静态的
2、进程是运行于内存中
程序是存储在磁盘中
3、进程有唯一识别码 pid
程序有唯一识别码 inode
进程和程序的分类:
1、程序的分类: 可执行程序 不可执行程序
2、进程的分类: 交互式进程 批处理进程 守护进程
所有进程都有自己的生命周期,在生命周期过程中会有各种状态:
==》状态: 运行态 等待态(可中断) 等待态(不可中断)
停止态 僵尸态
==》查看: ps aux ===>STAT列
S ===> 可中断的等待态
R ===> 运行态
D ===> 不可中断的等待态
T ===> 停止态
Z ===> 僵尸态 ====》以上5种状态进程某时刻只能处于一种态
s ===> 会话组长
N ===> 低优先级
< ===> 高优先级
l ===> 多线程
+ ===> 前台运行
进程的运行前后台控制。
./a.out 程序默认处于前台运行
./a.out & 程序转为后台执行
前后台切换; jobs fg bg
jobs 命令用于查看当前终端中运行的进程任务列表
fg 命令可以将一个后台运行的进程直接调整到前台运行
bg 命令可以将一个前台程序转换为后台运行。
注意:一般要先将进程挂起(ctrl+z),释放操作终端。
1、jobs的作用是什么?其他终端是否有效?
前后台切换命令,只能在同一个终端中有效。
且任务来自 jobs 查看的目标
2、如果有多个进程同时后台,如何选择某个进程前台?
可以使用任务编号+ 命令调整任意指定进程前后台切换
如果直接在多个任务中执行默认命令则任务编号带+ 优先执行。
fg xx
bg xx
fg ==>+
bg ==>+
进程控制命令: kill ===》杀死进程 ===》进程间通信
kill命令可以向指定进程发送信号;
使用kill命令完成进程间通信的框架:
kill -num pid
kill 当前系统中已经安装的程序,kill启动的时候属于kill进程
-num 所有的系统预定义的信号列表,可以通过 kill -l 查看
num 可以是信号的编号也可以是信号的宏名称
pid 当前系统中正在运行的目标进程的pid号
1- 64号信号:1 -31 系统已经预制的有具体含义的信号。大多数会杀死进程
34-64 系统尚未赋值含义的信号。
kill -19 pid == kill -SIGSTOP pid == ctrl+z
kill -18 pid == kill -SIGCONT pid
kill -9 pid == kill -SIGKILL pid == 一定会杀死进程
kill -2 pid == kill -SIGINT pid == ctrl+c
kill -3 pid == kill -SIGQUIT pid == ctrl+\
kill pid == kill -SIGTERM pid == kill -15 pid
killall -9 a.out
pkill -kill -t pts/2
pkill -kill -U cqb
ssh cqb@192.168.0.198
write cqb pts/5
======================================================================
多进程编程 ===》fork函数
#include <unistd.h>
pid_t fork(void);
功能:该函数可以动态生成一个同名子进程;ps -ef
父子进程具有相同的逻辑和空间,类似克隆体程序;
父子进程都可以独自按照自己逻辑执行,区别依据是 pid;
父子进程执行的位置不同,子进程永远从fork函数之后执行;
父进程的fork返回值就是子进程的pid号,而子进程中fork的
返回值 == 0;
父子进程都具有各自的独立4G内存空间。
参数:无
返回值:成功
pid_t >0 类型的子进程pid号
pid_t == 0; 子进程
失败 pid_t <0 ;异常
进程获取自身信息:
pid = getpid(); 获取自己的pid号
ppid =getppid();获取自己父亲的pid号
面试题:
如果有两个连续fork函数执行,会生成几个子进程?
他们之间的关系如何使用人类家族图谱形式表示?
有几个父进程 子进程 兄弟进程 孙子进程?
思考题:
如何生成10个子进程并让没给子进程执行不同的逻辑?
for(i=0;i<10;i++)
{
pid = fork();
if(pid == 0)
{
test(i); ///子进程不退出
}
}
while(1)
{
sleep(1);
}
扩展:
如何将以上代码修改,并能证明10个子进程在并发执行?
作业:
设计一个父子进程,提示用户任意输入,父进程将用户输入写入
文件,子进程实时打印文件内容,当输入"quit"双方退出。
进程笔记
最新推荐文章于 2021-12-26 16:53:39 发布