进程

理论

定义

进程 具有一定独立功能的程序的一次运行活动

特点

动态性
并发性
独立性
异步性

状态

就绪
执行
堵塞

概念

进程互斥

当有若干进程都要使用某一共享资源时,任何要使用该资源的进程必须等待,直到占有该资源这释放饿了该资源为止。

临界资源

操作系统一次只允许一个进程访问的资源

临界区

进程中访问临界资源的那带程序代码称为临界区

进程同步

*一组并发进程按一定的顺序的过程称为进程间的同步。具有同步关系的一组并发进程称为合作进程,合作进程间互相发送的信号成为消息或事件

死锁

程序

getpid/getppid

函数pid_t getpid(void)
头文件#include<sys/types.h> #include<unistd.h>
功能获取本进程ID
返回值返回本进程ID
函数pid_t getppid(void)
头文件#include<sys/types.h> #include<unistd.h>
功能获取父进程ID
返回值返父本进程ID

fork

函数pid_t fork(void)
头文件#include<unistd.h>
功能创建子进程
返回值父进程: 返回新创建的子进程PID ; 子进程: 返回 0 ; 失败: 返回 负值
注释从fork()后将有 父进程和子进程共享后续代码段,但其数据段是独立的 两个进程执行顺序不定

vfork

函数pid_t vfork(void)
头文件#include<unistd.h> #inclde<sys/types.h>
功能创建子进程
返回值父进程: 返回新创建的子进程PID ; 子进程: 返回 0 ; 失败: 返回 负值
注释从fork()后将有 父进程和子进程共享后续代码段、数据段 先执行子进程,再进行父进程

exec函数族

函数int execl(const char* path , const char* arg1,...
头文件#include<unistd.h>
功能调用一个程序替换当前程序 不产生新程序,故PID不变
返回值成功:不返回值, 失败:返回-1, 失败原因存于errno中
参数属性
path调用的函数名(包含完整路径)
arg-argn被执行程序所需的命令行参数,含程序名以空指针(NULL)结束
函数int execlp(const char* path , const char* arg1,...
头文件#include<unistd.h>
功能调用一个程序替换当前程序 不产生新程序,故PID不变
返回值成功:不返回值, 失败:返回-1, 失败原因存于errno中
参数属性
path调用的函数名(不含路径将从path环境变量中查找该程序)
arg-argn被执行程序所需的命令行参数,含程序名以空指针(NULL)结束
函数int execv(const char* path , char* const argv[],...
头文件#include<unistd.h>
功能调用一个程序替换当前程序 不产生新程序,故PID不变
返回值成功:不返回值, 失败:返回-1, 失败原因存于errno中
参数属性
path调用的函数名(包含完整路径)
argv[]被执行程序所需的命令行参数数组(包含侧程序名)

system

函数int system(const char* string)
头文件#include<stdlib.h>
功能调用fork产生子进程,由子进程来调用/bin/sh -c string 来执行参数string 所代表的命令
返回值
参数属性
string调用的命令名)
例程system("ls -al /ect/passwd")

wait

函数pid_t wait(int* status)
头文件#include<sys/typesh> #include<sys/wait.h>
功能阻塞该进程,直到其某个子进程退出
返回值成功: 返回被收集的子进程的进程ID 失败:(如果调用进程没有子进程) 返回 -1 同时errno被置为ECHILD。
参数属性
int* status保存被收集进程退出时的一些状态/一般输入NULL
例程system("ls -al /ect/passwd")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值