linux应用之----进程控制理论

进程理论基础

进程的定义:进程是一个具有特定功能的程序的一次运行活动。它和程序的区别在于:程序是存储在硬盘上的,是静态的;而进程是程序的执行。

进程特点:动态性 ,并发性 ,独立性 , 异步性 。

进程三态:就绪态,执行态,阻塞态。

进程的标识:用进程ID号来区分不同的进程。进程ID用PID表示,父进程ID用PPID表示,用户ID用UID表示。

进程互斥:是指当多个进程都要使用某一共享资源时,任何时刻做多允许一个进程使用,其它要使用该资源的进程必须要等待,直到占有该资源的进程结束为止。

临界资源:操作系统讲一次只允许一个进程访问的资源称为临界资源。

临界区:程序中,访问临界资源的那段代码称为临界区。

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

进程调度:按一定的算法,从一组待运行的进程中选出一个来占用CPU。调度方式有抢占式和非抢占式两种。调度的算法有:先来先服务调度算法;短进程优先调度算法;高优先级优先调度算法;时间片轮转法。

死锁:多个进程因竞争资源而导致的一种僵局,若无外力作用,这些进程都将永远不能向前推进。

进程控制编程

1:获取ID

       #include<sys/types.h>

      #include<unistd.h>

       pid_t getpid(void);    //获取当前运行的进程的ID号

       pid_t getppid(void);   //获取当前运行进程的父进程的ID号。

2: fork 函数

                int   fork()

1) 返回值-1,出错。

2) 返回值 0,表示子进程

3) 否则为 父进程,且该返回值是子进程的pid。

    3 :vfock 函数

                int  vfork()

1) 返回值-1,出错。

2) 返回值 0,表示子进程

3) 否则为 父进程,且该返回值是子进程的pid

4) vfork 与 fork 区别:vfork必定是子进程先执行完,父进程再执行,fork则不一定;vfork中子进程与父进程共用数据段,所以变量之间相互影响,fork函数从父进程拷贝了一段数据段,所以不会有影响。

4: wait(null)与waitpid(pid,null,0)函数。

头文件为 #include <sys/types.h> 和 #include<sys/wait.h>

    用于阻塞一个进程。如果是wait,那么只有当该进程的某个子进程退出以后,它才会继续执行。而waitpid则指定了子进程的ID,只有这个指定ID的子进程结束了,它才会继续执行。

    5: exec函数族

exec用指定的程序替换调用它的程序。和fork的区别:fork是产生了一个新的进程,新进程的ID号是新的。而exec是替换进程,并且替换之后,进程的ID号不会变。

#include <unistd.h>

execl("bin/ls","ls","-l","etc/password",char *0);

execlp("ls","ls","-l","etc/password",char *0);

以上两个函数,它们的第一个参数为被执行的程序名。所不同的是exexl必须有完整的路径名称。而execlp则不需要完整的路径名称,它会到系统的path路径去寻找。后面的参数就是执行这个命令所需要的参数。最后一个参数以空指针结尾。

execv("bin/ls",argv); 其中char *argv[]={"ls","-l","etc/password",char *0};也就是说execv把execl后面的参数以及最后的空指针都用一个字符串数组给代替了。


你可能感兴趣的:(编程,linux,算法,活动,null,Path)