进程基础知识

Linux下如何查看进程:

(1)ps -aux

(2) ps -ef

(3)ps axj

(4)top

(5)pstree

  信号

 

 

  1. 什么是进程

程序的一次动态执行过程,包括创建、调度、消亡

    1.  进程和程序的区别

程序(a.out)是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念

进程(./a.out)是一个动态的概念,它是程序执行的过程,包括创建、调度和消亡

    1.  进程是程序执行和资源(内存)管理的最小单位

为什么进程是资源管理的最小单位?

因为每一个进程都有0~4G的虚拟内存

    1.  如何区分不同的进程-->PID(子进程号)、PPID(父进程号)

进程是由进程创建的,我们有父进程、子进程

  1. 进程的类型
  1. 交互进程

该类进程是由shell控制和运行的。交互进程既可以在前台运行,也可以在后台运行。

前台运行:

后台运行:

(2)批处理进程

该类进程不属于某个终端,它被提交到一个队列中以便顺序执行。

(3)守护进程

该类进程在后台运行。它一般在Linux启动时开始执行,系统关闭时才结束。

  1. 进程的状态
  1. 运行态

此时进程正在运行,或者准备运行

  1. 等待态

此时进程在等待一个事件的发生或某种系统资源。

可中断

不可中断

  1. 停止态

此时进程被中止。

(4)死亡态

这是一个已终止的进程,但还在进程向量数组中占有一个task_struct(PCB)结构。

PCB结构(内核空间):包括进程控制块本身、打开的文件表象、当前目录、当前终端信息、线程基本信息、可访问的内存地址空间、PID、PPID、UID、EUID等,也就是说,内核通过PCB可以访问到进程的所有资源

 

  1. 进程的模式

5、调度进程

  1. 进程相关的系统调用

5.1 创建进程

注意:fork函数是父进程调用的,在父进程返回值之前,子进程已经创建好了,父进程和子进程的返回值是不一样的

在子进程创建成功之后,它会和父进程抢占资源,存在竞争关系,谁先调度,有调度算法决定

加上换行符之后,缓冲区刷新

5.2 getpid()和getppid()

5.2.1 getpid()

头文件:

 #include <sys/types.h>

 #include <unistd.h>

函数原型:

pid_t getpid(void);

函数功能:获取进程的ID号

返回值:返回调用进程的PID号

pid_t getppid(void);

函数功能:获取父进程的PID号

./a.out(子进程)-->./a.out(父进程)-->bash-->terminal-->systemd-->init

5.3 进程退出

exit、_exit、return(main函数中的return)

注意:(1)exit会刷新缓冲区

     (2)_exit不会刷新缓冲区

5.4 wait 和 waitpid

5.4.1 wait函数

调用该函数使进程阻塞,直到任一个子进程结束或者是该进程接收到了一个信号为止。如果该进程没有子进程或者其子进程已经结束,wait函数会立即返回

5.4.2 waitpid

获取子进程退出的状态:

  1. 孤儿进程

父进程先退出,子进程被systemd进程收养,变为后台进程

  1. 僵尸进程

子进程先于父进程退出,父进程没有回收子进程的资源(task_struct),此时子进程就变为僵尸进程

注意:如果父进程一直不退出,子进程就一直保持僵死状态,直到父进程退出,task_struct就会被systemed回收

8、exec函数族

不想让子进程执行父进程的代码段

 

l:表示列表

v:向量(数组)

p:系统会自动从环境变量“$PATH”所包含的路径中进行查找(不用添加路径)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值