linux进程

进程与程序、线程区别:

一、概念:

进程:进行当中的一次过程。进程是动态的。
程序:是一些保存在硬盘上的可执行的代码。程序是静态的。
线程:是计算机中独立运行的最小单位,运行时占用很少的系统资源。
多进程和多线程都是并行执行,进程与进程之间、线程与线程之间都是独立执行的。

二 进程的标识:

进程是通过唯一的进程ID标识。进程的ID是一个非负数。

ID为0的进程,称为系统进程,是内核的一部分,不执行任何磁盘上的程序。
ID为1的进程,称为init进程,是所有孤儿进程的父进程。
ID为2的进程,称为页守护进程,支持虚拟存储系统的分页操作。

三、进程的结构

代码段:存放可执行的代码,通常属于只读。
数据段:存放程序的全局变量、常量、静态变量
堆栈段:
        栈区:主要用于函数调用,存放函数的参数、函数内部定义的局部变量
        堆区:用于存放动态分配的内存变量

如:

#include<stdio.h>
#define PI 3.14//数据段

double area(double a)
{
    double ar;//栈区
    ar = PI*a*a;
    return ar;
}
double perimeter(double a)
{
    double pe;//栈区
    pe=2*PI*a;
    return pe;
}
int main()
{
    double ar,pe;
    double r=1.40;//栈区
    ar=area(r);
    pe=perimeter(r);
    printf("ar=%lf\n",ar);
    printf("pe=%lf\n",pe);

    return 0;
}

四、进程的操作

进程分为:
僵尸进程:当子进程先于父进程终止,而父进程么有调用wait函数等待子进程结束(进程描述符还在),那么子进程处于僵尸状态。
孤儿进程:父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程回收。

  1. 创建进程
    fork 、vfork
    相同点:调用一次,返回两次。
    不同点:
    fork:创建的子进程完全复制父进程的资源,只不过独立父进程,为了实现并发性。
    子进程和父进程哪个先运行,取决于系统的调度算法。一般情况下,父进程会调用wait()函数,等待子进程先结束。
    vfork:创建的子进程与父进程共享地址空间,子进程修改地址空间的任何数据,父进程可见。
    vfork:保证了子进程先运行,当子进程调用了exec函数族或者调用exit()函数后,父进程才可能被调度运行。

进程创建

int main()
{
pid_t cpid;
cpid=fork();
if(cpid == 0)
{
    sleep(2);
    printf(" child pid=%d\n",getpid());//获取子进程号
}
else if(cpid>0)
{
            int status;
        //sleep(1);
    printf("parent pid=%d\n",getpid());//获取父进程号
    wait(&status);//返回等待子进程的id号
    }
else
{
    printf("fork process  fail.\n");
}
    return  0;
}               
1.父进程先结束,会造成孤儿进程
2.子进程先结束,父进程么有调用wait()函数,会造成僵进程
3.父进程调用wait()函数
  1. 退出进程
    exit,return, _exit,abort区别
    exit:是一个函数,有参数,在头文件stdlib中声明。0标识正常退出,1表示异常退出;exit把控制权交给系统,return 把控制权交给调用函数。
    _exit:在头文件unistd中,_exit(),执行后立即返回给内核。
    return:是函数执行完后的返回。
    abort:异常终止。
    3.执行新进程
    exec函数族
    execl:链表
    execv: 容器
    execp:带环境变量
    1.执行新进程
    2.简单的库函数实现。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值