进程调度
概念:按一定的算法,从一组待运行的进程中选出一个来占用CPU的运行。
调度方法: 抢占式 、 非抢占式
调度算法:1)先来先服务 2)短进程优先 3)高优先级优先 4)时间片轮转法
死键:多个进程因竞争资源而形成一种僵局,若无外力作用,这些进程将永远不能向前推进。
获取ID的头文件:#include <sys/types.h> 、<unistd.h>
pid_t.getpid(void) 获取本进程ID
pid_t. getppid(void) 获取父进程ID
进程的创建: 创建子进程 pid_t fork(void)
一次调用,返回两个进程,可能有三种返回值;
1)返回 失败 < 0
2)父进程 返回子进程ID
3)子 返回0
init---------始祖进程:所有进程的源头
fork与vfork的区别:
1)fork:子进程拷贝父进程的数据段或资源(一模一样), 调用的头文件 <unistd.h>
vfork:子进程与父进程共享数据段
2)fork:父、子进程的执行顺序不确定
vfork:子进程先运行,父进程后运行
exce函数族: #include <unistd.h>
1 int execl(const char *path, const char *arg1,..............)
参数: path:被执行程序名(包含完整的路径)
arg1......argn:被执行的程序所需的命令行参数,含程序名,以空指针(NULL)结束
2 int main(int argc, char **argv) .......命令行参数 sleep( );
exec用被执行的程序替换调用它的程序
区别:
fork:创建一个新的进程,产生一个新的PID
exec启动一个新的程序,替换原有的进程,因此进程的PID不会发生改变 ............俗称 借尸还魂
进程的等待: #include <sys/types.h> #include <sys/wait.h>
pid_t wait(int status)
功能: 阻塞该进程,直到其某个子进程退出。