一、进程的含义

        进程是一个程序执行的过程,会去分配内存资源,cpu的调度

二、进程和程序的区别

(1)程序:静态

        存储在硬盘中代码,数据的集合

(2)进程:动态

①程序执行的过程,包括进程的创建、调度、消亡。

        .C ----> a.out-----> process(pid)

                1)程序是永存,进程是暂时的

                2)进程有程序状态的变化,程序没有

                3)进程可以并发,程序无并发

                4)进程与进程会存在竞争计算机的资源

                5)一个程序可以运行多次,变成多个进程

②内存的分布

        0-3G,是进程的空间,3G-4G是内核的空间。

③进程分类

        1.交互式进程。

        2.批处理进程 shell脚本。

        3.守护进程。

三、进程的作用

        并发,并行区别。

四、进程的状态

        3个状态,就绪->执行态->阻塞(等待,睡眠)基本操作系统

        Linux中的状态,运行态,睡眠态,僵尸,暂停态。

五、查询进程相关命令

1.ps aux

        查看进程相关信息。

注:

        1.就绪态、运行态R

        2.睡眠态、等待态

                可唤醒状态 S

                不可唤醒状态 D

        3.停止态

        4.僵尸态 T

        5.结束态

2.top

        根据CPU占用率查看进程相关信息。

3.kill和killall

        kill -2 PID 默认发15

发送信号+PID对应的进程,默认接收者关闭

        killall -9 进程名

发送信号 进程名对应的所有进程

        killall a.out

4.apt install / dnf install

        ---安装

六、进程函数

1.fork

        pid_t fork();叉子

注:

        ①一次调用,会返回两次。

        ②子进程先运行和是父进程先进程,顺序不确定。

        ③变量不共享。

        ④子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。

(1)功能:通过该函数可以从当前进程中克隆一个同名新进程。

注:

        ①克隆的进程称为子进程,原有的进程称为父进程。

        ②子进程是父进程的完全拷贝。

        ③子进程的执行过程是从fork函数之后执行。

        ④子进程与父进程具有相同的代码逻辑。

(2)返回值:int类型的数字

        在父进程中:成功 返回值是子进程的pid号>0

            失败 返回-1

        在子进程中:成功 返回值 0

            失败 无

2.getpid

        pid_t getpid(void);

(1)功能:

                获得调用该函数进程的pid

(2)参数:

                缺省

(3)返回值:

                进程的pid

3.getppid

        pid_t getppid(void);

(1)功能:

                获得调用该函数的父进程的pid号

(2)参数:

                缺省

(3)返回值:

        返回父进程的id号

4.应用场合

        1)一个进程希望复制自己,使父子进程同时执行同的代码段。网络服务中会比较多见。

        2)一个进程需要执行一个不同的程序。

5.父子进程的关系

        子进程是进程的副本。子进程获得父进程数据段,堆,栈,正文段共享。在fork之后,一般情况那个会先运行,是不确定的。如果非要确定那个要先运行,需要IPC机制。

6.区别

        1)fork的返回值

        2)pid不同

七、进程的终止

1) main 中return

2)exit,c库函数,会执行io库的清理工作,关闭所有 的流,以及所有打开的文件。已经清理函数(atexit)。

3)_exit,_Exit 会关闭所有的已经打开的文件,不执行清理函数。

4)主线程退出

5)主线程调用pthread_exit

6)abortO

7) signal kill pid

8)最后一个线程被pthread_cancle

八、进程的退出

注:僵尸进程:进程执行结束但空间未被回收变成僵尸进程。

1.exit 库函数

        退出状态,终止的进程会通知父进程,自己使如何终止的。如果是正常结束(终止),则由exit传入的参数。如果是异常终止,则有内核通知异常终止原因的状态。任何情况下,负进程都能使用wait,waitpid获得这个状态,以及资源的回收。

        void exit(int status)

        exit(1); 25.6 KB/s 598 KB/s

(1)功能:

                让进程退出,并刷新缓存区

(2)参数:

                status:进程退出的状态

        EXIT_SUCCESS        0

        EXIT_FAILURE          1

(3)返回值:

                缺省

2._exit系统调用

        void _exit(int status);

(1)功能:

                让进程退出,不刷新缓存区

(2)参数:

                status:进程退出状态

(3)返回值:

                缺省

Logo

纵情码海钱塘涌,杭州开发者创新动! 属于杭州的开发者社区!致力于为杭州地区的开发者提供学习、合作和成长的机会;同时也为企业交流招聘提供舞台!

更多推荐