Linux06(进程)

#技术笔记

1.从用户视角来看,进程是一个运行起来的程序,如果只是安装了程序,这样不叫进程,只有这些东西运行起来才算进程。

2.虚拟内存:我们认为我们占用的内存,是从0开始一块连续的内存。虚拟内存到真实内存,操作系统在底层做映射。直接使用物理内存的话,进程间隔离困难,内存碎片,程序员管理内存麻烦。

3.虚拟CPU:我们认为,我们的程序在运行的时候就是一个程序独占CPU。

4.进程的调度:谁抢到CPU 谁就执行。CPU是把时间划分成一个个时间片的,要使用,就来抢。

5.进程需要自己保存信息:内存,PCB(进程控制块),在Linux 是用结构体保存自己的信息。

  1. ps命令

ps 命令常用的两种形式就是, ps -elf 和 ps aux。某些列字段的含义,PID 是进程id,用来唯一标识进程;PPID 是父进程id;CMD 启动进程的命令。

  1. free命令

free 的作用就是显示内存的使用情况, 使用时最好用 free -h <----- 这里的-h是人类阅读模式。某些列字段含义,buff/cache 缓冲区和页缓冲占用的内存大小。Swap 是交换区, 将不常用的内存数据临时移到磁盘上,这块磁盘空间就叫swap。

  1. top命令

显示用户数、任务数、电脑启动时间等;其中load average : 0.00,0.00,0.00 这3个数分别表示1/5/15分钟平均负载,如果 第一个数特别大,其他后面两个小一点,说明近期CPU在被激烈竞争,有可能是系统启动,或者一些攻击行为,或者定时任务启动等等。更具体查看可以使用htop命令,使用的时候安装一下即可。

9.kill命令

通常用于终止进程, kill -2 PID 和 kill -9 PID,第一个是让进程自己挂,第二个是强制终止。

10.fork()

fork 就是用来**创建子进程。**fork 之前的代码有一个进程在执行,fork之后的代码有两个进程执行。

下面有些许绕,fork 的返回值(假设是 ret),如果 ret 是0,则表示现在在新进程(且新进程pid 大概是父进程的 pid + 1),如果 ret 非0,则表明在父进程,ret 的值是子进程的pid,如果是-1,代表创建进程失败。例如如下代码。

复制代码
#include <my_headerc.h>


int main(int argc, char *argv[])
{
    printf("pid = %d\n", getpid());

    pid_t ret = fork();

    if(ret == 0)
    {
        printf("child, pid = %d, ppid = %d, ret = %d\n", getpid(), getppid(), ret);
    }
    else
    {
        printf("father, pid = %d,ppid = %d, ret = %d\n", getpid(), getppid() , ret);
    }

    return 0;
}

运行结果是:

复制代码
pid = 39872
father, pid = 39872,ppid = 37086, ret = 39873
child, pid = 39873, ppid = 39872, ret = 0

一般来说都是父进程先运行完。

fork有个机制是写时复制(COW, copy on write),由于每次要是复制一整个内存,开销就太大了,所以采用写时复制,复制的单位是页,并不是整个物理内存。

12.exec 函数族

使用 execl,execv 都可以在当前进程,调用其他进程。 第一个excel 参数是一个一个给,第二个是给一个数组。

  1. shell 的本质就是创建进程, 让新进程干新活,老进程干老活; 用 fork + exec 可以实现。
相关推荐
caimouse7 小时前
reactos编码规范
c语言·开发语言
Cosolar7 小时前
LlamaIndex索引类型全解析:原理与实战指南
运维·服务器
方便面不加香菜9 小时前
Linux--基础IO(一)
linux·运维·服务器
鼎讯信通11 小时前
风电光缆运维提质增效:G-4000A 光缆故障追踪仪破解风场巡检难题
运维·网络·数据库
AI thought12 小时前
【转】C语言中 -> 是什么意思?
c语言·位移运算符·右移赋值·无符号整数·算术右移
三十..12 小时前
MySQL 从入门到高可用架构实战精要
运维·数据库·mysql
跨境数据猎手12 小时前
大数据在电商行业的应用
大数据·运维·爬虫
linyanRPA13 小时前
影刀RPA店群自动化实战:多店铺活动自动报名与促销管理架构设计
运维·自动化·办公自动化·rpa·python脚本·爬虫自动化·店群自动化
mounter62513 小时前
现代 Linux 内存管理的演进与变革:从传统 LRU 到多代架构 MGLRU
linux·服务器·kernel
会Tk矩阵群控的小木13 小时前
安卓群控系统对于游戏工作室实战教程
android·运维·游戏·adb·开源软件·个人开发