进程与线程之进程的理解

首先对堆栈等进程运行过程中的内存有了更深层次的理解:

我们之前了解到,程序在运行中存在堆栈,字符串常量区代码区。

现在我们提出虚拟内存的概念:程序在运行的过程中开辟0~4G的虚拟空间使用MUU映射单元映射到物理地址上

简而言之,进程是运行中的程序,可参考windows下的任务管理器,或者手机的后台应用。而程序则可认为是应用、代码等。

当应用在运行的过程中则为进程。

1·进程:

    程序:存放在外存一个数据文件                固定的、死的

    进程:程序 动态执行 的过程(程序的运行)     运行的、活的
            包括:进程的创建、进程的调度、进程的消亡

2·进程的命令:
    1·top
        动态查看当前系统中的所有进程信息    (类似于windows的任务管理器)
        PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
            PID:唯一识别进程的ID号(例如QQ登两个账号,就需要两个PID)
            USER:进程所属用户名
            PR优先级:数值低 优先级高(-20 ~ 19) (window下数值高 优先级高)

            NI:进程的nice值,用来调整进程的优先级
            VIRT:进程使用的虚拟内存

            RES:进程占用的物理内存

            SHR:进程占用的共享内存

           

        S :
            进程状态:
                R   运行态/就绪态
                S   睡眠态
                D   不可唤醒等待态
                T   暂停态
                Z   僵尸态  代码执行结束但是空间未回收
                X   结束态

            %MEM:进程占用物理内存的百分比
            
           
        q 退出top

    //设定进程优先级
    2·nice
        设定优先级运行进程
        nice -n 优先级 要进行的进程任务 

      renice
        重新设定一个运行进程的优先级
        renice -n 优先级 进程PID 

    3·kill
        杀死指定的进程任务
        示例:
        kill -9 进程PID(47914)
        -9: kill的方式

      killall
        杀死进程名对应的所有进程任务

        示例:
        killall -9 进程名(a.out)


    4·ps -ef
        查看当前时刻所有的进程信息(10:14) 静止的
        PPID:父进程的ID号

      ps -ef | grep a.out
        查看a.out的信息

    5·pstree
        查看树形进程联系

    6·ps -aux
        TTY:? 精灵进程不依赖于终端

    7·./a.out &
        将进程放在后台运行

        jobs:查看一个终端下后台执行的所有任务
        fg 1/2/3(编号)
            将后台任务放在前台来执行


进程的调度:

 1·常见的调度算法
        1·先来先执行
        2·短作业优先
        3·优先级调度
        4·时间片轮转调度算法
            宏观并行  微观串行 (多任务)
        5·多级反馈队列调度
        6.负载均衡调度


  1.进程的创建 
      fork 
      pid_t fork(void);
      功能:
        创建一个子进程,新创建的进程称为原来进程的子进程,原来的进程称为新进程的父进程
      参数:
        void 缺省
      返回值:
        成功子进程返回0 
        父进程返回子进程的PID 
        失败返回-1 

       父进程调用fork创建子进程,子进程拷贝父进程的文本段、数据段、系统数据段  

      getpid
      pid_t getpid(void);
      功能:
        获得调用进程的PID号
      
      getppid
      pid_t getppid(void);
      功能:
        获得调用进程的PPID

  练习:
    创建一个父进程的2个子进程,子进程中打印自己的PID和父进程的PID
                            父进程中打印自己的PID和两个子进程的PID

  2.exit
    void exit(int status);
    功能:
      让进程结束
    参数:
      status:进程结束的状态
    返回值:
      缺省

    exit在主函数中使用和return效果一致
    exit会刷新缓存区

    _exit
    void _exit(int status);
    功能:
      让进程直接结束
    参数:
      status:进程结束的状态
    返回值:
      缺省

7.进程的消亡
  1.僵尸进程:
    进程代码执行结束,空间没有被回收,称为僵尸进程
  2.如何避免产生僵尸进程?
    1.让父进程先结束
    2.让父进程回收子进程空间

  3.孤儿进程:
      进程的父进程先结束,此时该进程称为孤儿进程,被系统进程收养,进程再结束时,会被系统进程回收进程空间

8.wait 
  pid_t wait(int *wstatus);
  功能:
    回收子进程空间
  参数:
    wstatus:存放子进程结束状态空间的首地址
  返回值:
    成功返回回收到的子进程PID
    失败返回-1 

  1.wait函数具有阻塞功能
  2.wait函数具有同步功能

  WIFEXITED(wstatus)
  进程是否正常退出 

  WEXITSTATUS(wstatus)
  进程结束状态值

  WIFSIGNALED(wstatus)
  进程是否被信号杀死

  WTERMSIG(wstatus)
  获得杀死进程的信号编号

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值