Linux软件编程:进程

本文详细介绍了进程的概念,包括程序与进程的区别,进程的管理命令如top、ps、kill等,进程的生命周期、创建特点、调度机制以及关键函数接口如fork、exit、wait和exec系列。还探讨了守护进程、孤儿进程和避免僵尸进程的方法。
摘要由CSDN通过智能技术生成

一、进程

1.程序和进程的区别

        程序:在磁盘空间中存放的一串数据的集合

        进程:程序运行的过程

2.进程的命令:

        1.top:根据CPU占用率查看进程信息

          PID:唯一识别一个进程的ID号

          q:退出

        2.ps -ef

                PPID:一个进程的父进程

        3.ps -aux

                可以看到进程的状态

        4.pstree

                查看进程关系

        5.kill

                kill -9 进程的ID号

                kill -9进程名

        6.ps -ef | grep 字符串

                在ps -ef生成的信息中找字符串相关联的若干行

        7../a.out &

                让a.out在后台运行

        8.jobs

                查看后台运行的任务

        9.fg 标号

                标号对应的后台任务放到前台运行

3.精灵进程/守护进程

        随着操作系统开启运行进程,随着操作系统结束,进程结束,为用户提供服务。

4.进程的创建

        32位操作系统中:进程创建时,操作系统分配0-4G内存空间,分为:文本段、数据段、系统数据段。

        文本段:存放代码和指令

        数据段:存放字符串常量、全局变量、静态常量

        系统数据段:堆区:malloc申请空间

                              栈区:局部变量

5.进程创建的特点:

        1.一个进程占0-4G内存空间;

        2.两个及两个以上的进程也占0-4G内存空间

        3.进程空间彼此相互独立

        4.0-4G为虚拟内存空间,进程1运行时映射到进程1的实际物理内存空间、进程2运行时映射到进程2的实际物理内存空间。

6.进程的调度

        1.宏观并行,微观串行

        2.宏观并行:从用户角度出发,在多个任务中来回切换调度任务实现多任务执行

        3.微观串行:从CPU角度出发,在多个任务中来回切换调度任务实现多个任务的执行

        4.进程状态:

                1.就绪态、运行态        R

                2.睡眠态(可唤醒等待态)        S

                3.不可唤醒等待态        D        

                4.暂停态        T

                5.僵尸态        Z

                6.结束态        X

7.进程的相关函数接口:

        1.fork

                pid_t fork(void)

                功能:创建一个子进程

                参数:缺省

                返回值:成功在父进程中返回创建的子进程的PID;在子进程中返回0;失败返回-1。

        2.getpid

                pid_t getpid(void)

                功能:获得调用该函数的进程的ID号

                参数:缺省

                返回值:进程的ID号

8.进程的消亡:

        1.僵尸态:进程代码执行结束,但空间没有被回收

        2.僵尸进程如何产生:子进程结束,父进程没有回收子进程空间,子进程会成为僵尸进程。

        3.如何避免产生僵尸进程:

                1.让父进程先结束,子进程会成为孤儿进程,此时子进程再结束,会被系统回收进程空间。

                2.子进程结束时,父进程回收子进程空间,避免产生僵尸进程。

9.孤儿进程

        一个进程的父进程先结束,子进程会成为成为孤儿进程,被init进程收养,子进程再结束,被init进程回收空间。

10.exit

        1.void exit(int status)

        功能:让进程空间结束

        参数:status:进程结束的状态

        返回值:缺省

        2.void _exit(int status)

        功能:让进程立即结束

        参数:status:进程结束的状态

        返回值:缺省

11.wait

        pid_t wait(int *wstatus)

        功能:回收子进程空间

        参数:wstatus:存放子进程结束状态空间的首地址

                    NULL:不关注子进程结束状态

        返回值:成功返回回收到的子进程的PID

                        失败返回-1

        注意事项:

                1.wait具有阻塞功能,只有一个子进程时,阻塞等待直到子进程结束才会继续向下执行

                2.一个进程没有子进程,调用wait,wait会直接返回-1

                3.一个进程有多个子进程时,wait回收先结束的子进程

                4.wait可以实现同步的功能

12.waitpid

        pid_t waitpid(pid_t pid, int *wstatus, int options);

        功能:回收指定的子进程空间

        参数:

                pid:想要回收的子进程的PID号

                wstatus:回收子进程结束的状态

                options:

                        0        阻塞回收

                        WNOHANG        非阻塞回收

        返回值:

                成功返回接收到的子进程的PID

                失败返回-1

                没有回收到子进程空间返回0

13.exec函数族:

        int execl(const char *path, const char *arg, .../*(char *)NULL */)

        int execlp(const char *file, const char *arg, .../*(char *)NULL*/)

        int execle(const char *path, const char *arg, .../*(char *)NULL, char *const envp[] */)

        int execv(const char *path, char *const argv[])

        int execvp(const char *file, char *const argv[])

        int execvpe(const char *file, char *const argv[], char *const envp[])

        功能:利用进程空间执行另一份代码

        l:执行新代码时,参数以列表形式传递

        v:执行新代码时,参数以指针数组形式传递

        p:执行新代码时,代码在系统路径PATH下查找

        fork + exec:可以启动一个新的软件代码

                        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值