进程控制原理及程序设计

一进程控制原理

1
进程是一个具有一定独立功能的程序的一次运行活动。
进程是运行着的程序。
2
特点
动态性,并发性,独立性,异步性
3
状态
就绪态,执行态,阻塞态
4
进程ID-PID
父进程ID-PPID
启动进程的用户-UID
5
进程互斥
当硬件或软件资源不允许多个进程共同使用时就会产生互斥
6
临界资源
临界区:
7
进程同步:一组并发进程按《固定的顺序》执行的过程称为进程间的同步。
8
进程调度:从一组进程中选一个来占有CPU
调度方式:抢占式和非抢占式
9
调度算法:
先来先服务;短进程优先调度;高优先级优先调度;时间片轮转法
时间片轮转法:每个进程在时间片,进行轮转执行。
10
死锁:多个进程因竞争资源而形成的僵局。

实例:getpid.c、fork1.c、

fork_count

#include<unistd.h>
#include<stdio.h>
int main(void)
{
pid_t pid;
int count =0;
pid=fork();
count++;
printf("count=%d\n",count);
return 0;

}

上面,fork()后面的会被执行两次,父进程和子进程各执行一次,但彼此数据独立,so两次count值相等。

结果是count=1 

count=1

vfork创建的父进程与子进程共用数据段

fork创建的父进程与子进程独立,不共用数据段

#include<unistd.h>
#include<stdio.h>
int main(void)
{
pid_t pid;
int count =0;
pid=vfork();
count++;
printf("count=%d\n",count);
return 0;

}

count=1

count=2

问题:我的count=1

count=13623285而且还循环不停显示

 

二进程控制程序设计1
获取ID
2
父进程:说到父进程,要提到子进程,当进程创建进程时,创建的进程为子进程,原来的进程为父进程。
pid_t getpid(void)
pid_t getppid(void)
3
进程传进
#include<unistd.h>
pid_t fork(void)
功能:创建子进程
代码段是共享的,子进程会将其拷贝过来,故:下面的程序,父进程执行一次,子进程也执行一独立
4
父进程和子进程的数据完全彼此。
5
vfork:子进程和父进程共享数据段
fork:父、子进程的执行次序不确定。
vfork:子进程先运行,父进程后运行
6
exec函数族
exec用《被执行的程序》替换《调用它的程序》。
fork创建新进程,产生一个新的PID
exec启动一个新程序,替换原有进程,因此进程PID不会改变
7
execl//包含路径
execlp//不包含路径
execv(const char*path,char*const argv[])//含路径,argv[]:被执行程序所需的命令行参数数组

实例

#include<unistd.h>
main()
{
execl("/bin/ls","ls","-al","/etc/passwd",(char*)0);
}

#include<unistd.h>

main()

{

char*argv[]={"ls","-al","/etc/passwd",(char*)0};

execv(“/bin/ls",argv);

}

#include<stdlib.h>

void main()

{

system("ls -al /etc/passwd");

}

 

 



8
system.c///system调用exec产生子进程
9

pid_t wait(int *status)//等带其某个子进程退出。

实例

#include<sys/types.h>

#include<sys/wait.h>

#include<unistd.h>

#include<stdlib.h>

void mian()

{

pid_t pc,pr;

pc fork();

if(pc==0)

{

printf("This is chile process with pid of %d\n",getpid());

sleep(10);//睡眠10秒

}

else if(pid>0)//如果是父进程

{

pr=wait(NULL);

printf(“I catched a chile process with pid of %d\n”,pr);

}

exit(0);

 

 

}

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值