国嵌视频学习第三天-进程控制
2012-04-07 20:50
176 查看
进程ID(PID):标示进程的唯一数字
父进程的ID(PPID)
启动进程的用户ID(UID)
进程互斥
进程互斥是指当有若干进程都要使用某一共享资源时,任何时刻最多允许一个进程使用,其他药使用该资源的进程必须等待,直到占用该资源者释放了该资源为止。
临界资源
操作系统中将一次只允许一个进程访问的资源称为临界资源
临界区
进程中访问临界资源的那段程序代码称为临界区。为实现对临界资源的互斥访问,应保证诸进程互斥地进入各自的临界区
进程同步
一组并发进程按一定的顺序执行的过程称为进程间的同步。具有同步关系的一组并发进程称为合作进程,合作进程间互发发送的信号称为消息或事件
进程调度
概念:按一定算法,从一组待运行的进程(就绪态的进程)中选出一个来占有CPU运行
调度方式: 抢占式
非抢占式
调度算法
-----------先来先服务调度算法
-----------短进程优先调度算法
-----------高优先级优先调度算法
-----------时间片轮换法
死锁
多个进程因竞争资源而形成一种僵局,若无外力作用,这些进程都将永远不能再向前推进
获取ID
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void)
获取本进程ID
pid_t getppid(void)
获取父进程ID
例.
进程创建-fork
#include <unistd.h>
pid_t fork(void)
功能:创建子进程
Fork的奇妙之处在于它被调用一次,却返回两次(父进程和子进程各返回一次),它可能有三种不同的返回值:
1.在父进程中,fork返回新创建的子进程的PID;
2.在子进程中,fork返回0(但是并不是说子进程的ID为0,而只是返回0!)
3.如果出现错误,fork返回一个负值
例.fork1.c
进程创建
子进程的数据空间、堆栈空间都会从父进程得到一个拷贝,而不是共享。
进程创建-vfork
#include <sys/types.h>
#include <unistd.h>
pid_t vfork(void)
功能:创建子进程
fork VS. vfork
区别:
1.fork:子进程拷贝父进程的数据段
vfork:子进程与父进程共享数据段
2.fork:父、子进程的执行次序不确定
vfork:子进程先运行,父进程后运行
例.
exec函数族
exec用被执行的程序替换调用它的程序。(包括数据段)
区别:
fork创建一个新的进程,产生一个新的PID
exec启动一个新程序,替换原有的进程,因此进程的PID不会改变
#include <unistd.h>
int execl(const char* path, const char* arg1,...)
参数:
path:被执行程序名(还能完整路径)
arg1 - argn:被执行程序所需的命令行参数,含程序名。以空指针(NULL)结束
例execl.c
#include <unistd.h>
int execlp(const char* path,const char* arg1,...)
参数:
path:被执行的程序名(不含路径,将从path环境变量中查找执行该程序)
arg1 - argn:被执行程序所需的命令行参数,含程序名。以空指针(NULL)结束
例execlp.c
#include <unistd.h>
int execv(const char* path, char* const argv[])
参数:
path:被执行程序名(含完整路径)
argv[]:被执行程序所需的命令行参数数组
例execv.c
#include <stdlib.h>
int system(const char* string)
功能:
该函数将调用fork产生子进程,由子进程来调用/bin/sh -c string来执行参数string所代表的命令
例system.c
进程等待
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int * status)
功能:
阻塞该进程,直到其某个子进程退出,wait返回的值是退出的子进程pid
例wait.c
父进程的ID(PPID)
启动进程的用户ID(UID)
进程互斥
进程互斥是指当有若干进程都要使用某一共享资源时,任何时刻最多允许一个进程使用,其他药使用该资源的进程必须等待,直到占用该资源者释放了该资源为止。
临界资源
操作系统中将一次只允许一个进程访问的资源称为临界资源
临界区
进程中访问临界资源的那段程序代码称为临界区。为实现对临界资源的互斥访问,应保证诸进程互斥地进入各自的临界区
进程同步
一组并发进程按一定的顺序执行的过程称为进程间的同步。具有同步关系的一组并发进程称为合作进程,合作进程间互发发送的信号称为消息或事件
进程调度
概念:按一定算法,从一组待运行的进程(就绪态的进程)中选出一个来占有CPU运行
调度方式: 抢占式
非抢占式
调度算法
-----------先来先服务调度算法
-----------短进程优先调度算法
-----------高优先级优先调度算法
-----------时间片轮换法
死锁
多个进程因竞争资源而形成一种僵局,若无外力作用,这些进程都将永远不能再向前推进
获取ID
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void)
获取本进程ID
pid_t getppid(void)
获取父进程ID
例.
进程创建-fork
#include <unistd.h>
pid_t fork(void)
功能:创建子进程
Fork的奇妙之处在于它被调用一次,却返回两次(父进程和子进程各返回一次),它可能有三种不同的返回值:
1.在父进程中,fork返回新创建的子进程的PID;
2.在子进程中,fork返回0(但是并不是说子进程的ID为0,而只是返回0!)
3.如果出现错误,fork返回一个负值
例.fork1.c
进程创建
子进程的数据空间、堆栈空间都会从父进程得到一个拷贝,而不是共享。
进程创建-vfork
#include <sys/types.h>
#include <unistd.h>
pid_t vfork(void)
功能:创建子进程
fork VS. vfork
区别:
1.fork:子进程拷贝父进程的数据段
vfork:子进程与父进程共享数据段
2.fork:父、子进程的执行次序不确定
vfork:子进程先运行,父进程后运行
例.
exec函数族
exec用被执行的程序替换调用它的程序。(包括数据段)
区别:
fork创建一个新的进程,产生一个新的PID
exec启动一个新程序,替换原有的进程,因此进程的PID不会改变
#include <unistd.h>
int execl(const char* path, const char* arg1,...)
参数:
path:被执行程序名(还能完整路径)
arg1 - argn:被执行程序所需的命令行参数,含程序名。以空指针(NULL)结束
例execl.c
#include <unistd.h>
int execlp(const char* path,const char* arg1,...)
参数:
path:被执行的程序名(不含路径,将从path环境变量中查找执行该程序)
arg1 - argn:被执行程序所需的命令行参数,含程序名。以空指针(NULL)结束
例execlp.c
#include <unistd.h>
int execv(const char* path, char* const argv[])
参数:
path:被执行程序名(含完整路径)
argv[]:被执行程序所需的命令行参数数组
例execv.c
#include <stdlib.h>
int system(const char* string)
功能:
该函数将调用fork产生子进程,由子进程来调用/bin/sh -c string来执行参数string所代表的命令
例system.c
进程等待
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int * status)
功能:
阻塞该进程,直到其某个子进程退出,wait返回的值是退出的子进程pid
例wait.c
相关文章推荐
- 国嵌视频学习第十一天——内核进程控制
- 国嵌视频学习第五天-进程通信2
- 国嵌视频学习第四天-进程通信
- 国嵌视频学习第二天——时间编程
- Linux 学习笔记(四)进程控制
- 友善之臂视频监控方案源码学习(5) - 输入控制
- 补充一个小问题:关于国嵌视频里面的进程创建例程的小错误
- Linux学习日志_进程控制
- 友善之臂视频监控方案源码学习(3) - 守护进程
- 韩顺平 javascript教学视频_学习笔记5_js三大流程控制(顺序流程、分支控制、循环控制)
- 国嵌视频学习第六天——多线程
- UNIX环境编程学习笔记(7)——文件I/O之文件访问权限与进程访问控制
- 【ARM&Linux】学习笔记之Linux下多进程控制
- Opencv学习之--进度条控制视频
- 进程控制学习笔记
- OpenCV学习笔记【3】:视频播放控制
- 国嵌视频学习——Linux内核驱动
- apue学习第十四天——进程控制3
- 友善之臂视频监控方案源码学习(3) - 守护进程
- 进程控制——fork系统调用学习笔记