进程的详解(进程和程序,进程调度,进程同步和互斥(经典同步问题) )

经过上一文对进程和线程有一个简单的理解,下面详细的介绍进程:

进程:是程序的一次执行,具有动态性,动态性还表现在:“它由创建而产生,由调度而执行,由撤消而消亡”可见,进程实体有一定的生命期,而程序则只是一组有序指令的集合,并存放于某种介质上,其本身并不具有运动的含义,因而是静态的。(并发性是进程重要的特征)

进程的状态和转化关系

 

还可以添加进程的创建和结束

孤儿进程:若父进程先结束,子进程成为孤儿进程,被init进程收养(init进程的优先级为1,为所有进程的父进程)
僵尸进程:若子进程先结束,父进程如果没有及时回收,子进程变成僵尸进程
引起进程创建的原因:1 用户登录。在分时系统中,用户在终端键入登录命令后,如果是合法用户,系统将为该终端建立一个进程,并把它插入就绪队列中。
                                 2作业调度。在批处理系统中,当作业调度程序按一定的算法调度到某作业时,便将该作业装入内存,为它分配必要的资源,并立即为它创建进程,再插入就绪队列中

                                  3提供服务。当运行中的用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需要的服务

引起进程终止的事件:1 越界错误。这是指程序所访问的存储区已越出该进程的区域。

                                    2 等待超时。这是指进程等待某事件的时间超过了规定的最大值

                                    3 非法指令。这是指程序试图去执行一条不存在的指令。出现该错误的原因,可能是程序错误地转移到数据区,把数据当成了指令。

在应用层进程的使用方式:

fork()用于进程的创建

当返回等于0时创建子进程,大于0创建父进程,小于0创建失败

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{ 
    pid_t pid;
    char *message;
    int n;
    pid = fork();
    if (pid < 0) {
    perror("fork failed");
    exit(1);
    }
    if (pid == 0) {//子进程的创建
    message = "This is the child\n";
    n = 6;
    } else {//父进程的创建
    message = "This is the parent\n";
    n = 3;
    }
    for(; n > 0; n--) {
     printf(message);
     sleep(1);
    }
   return 0;
}




 

 


 

 

 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值