进程、线程的相关概念

1、什么是进程?

        是一次程序的运行,是操作系统进行资源分配的最小单位。

2、进程都包含什么?

                BSS段:用来存放程序中为初始化的全局变量的。

                数据段:用来存放已经初始化的全局变量的一块区域。以及static变量。

                代码段:存放执行代码的一块内存区域,也有可能存放一些不可改变的常数变量,例 如:字符串常量。

                堆:存放进程在运行过程动态分配的内存。

                栈:存放程序的局部变量(临时变量),这里不包括用static修饰的局部变量。函数的参数,返回值等也存放在栈中。

3、PCB又是什么?

        系统通过PCB来感知进程,PCB是一个数据结构,它描述了一个进程特征。都描述了什么呢?

        (1)进程ID:也就是PID,每个进程都有唯一PID与其对应,相当于人的身份证号码,与每个人对应一样。

        (2)文件描述符:

        (3)内存指针:

        (4)进程优先级、状态

         (5)用户进程

4、进程类型

        交互进程:shell下启动,既可以在前台运行,也可以在后台运行。

        批处理进程:和终端无关,在作业队列中,按照顺序执行。

        守护进程:和终端无关,一直在后台运行。

5、进程的状态:

               运行态:进程正在运行或者准备运行

                等待态:在等待自己所需要的资源

                停止态:进程中止,等待运行的信号。

                死亡态:已经终止,但是没有释放PCB。

4、应用:

(1)查看进程:

        ps :

                -e:显示所有进程

                -l:长格式显示更加详细信息

                -f:全部列出,通常和其他选项联用。

                例如:ps -elf|grep a.out  把所有a.out找出来

        top:

                shif +>翻页

                shif+<

                top -p  PID

        /proc:    ls /proc/

  (2)修改进程优先级

        nice:

                nice [-n NI值] 命令

                ps -elf|grep bash

                nice -n 12 /bin/bash

                ps -elf|grep bash

        renice:改变正在运行的进程的优先级

                    renice [优先级] PID

(3)jobs:查看后台进程

(4)bg:将挂起的进程在后台运行

                bg 作业号

(5)fg:把后台运行的进程放到前台运行

                fg 作业号

(6)&:./a.out  & 程序在后台运行

(7)ctrl+z:把程序停止运行,并且放到后台。

实践:用程序创建进程。

   (1)如何创建进程? man fork

                pid_t  fork(void);成功,返回子进程的pid,子进程返回0。

                父子进程执行先后没有规律。

                子进程只执行fork之后的代码。

                fork 是将代码复制一份,但是子进程只执行fork下的代码。以下代码会打印两个ID:

        pid=6617 (父进程ID)
        pid=0  (子进程ID)

#include <stdio.h>
  2 #include <unistd.h>
  3 
  4 int main(int argc, char *argv[])
  5 {
  6     pid_t pid;
  7     pid = fork();
  8     printf("pid=%d\n", (int)pid);
        return 0;
    }

   (2)进程结束:

                父进程先结束,子进程会变成孤儿进程,被Init进程收养,进到后台运行。

                子进程先结束,父进程如果不及时回收子进程, 子进程将变成僵尸进程。

                exit()与_exit()区别:前者退出的时候,刷新流缓冲区,后者退出的时候,不刷新流缓冲区。

   (3)进程回收:wait回收紫金城、僵尸进程

        exit(2);

        wait(&status);

        status保存返回值和结束方式的地址,通过宏判断。

        status为NULL,释放PCB

       waitpid();

                                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值