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 可以实现。
相关推荐
ajassi20001 小时前
AI语音智能体开发日记(十八)智能体服务器xiaozhi-esp32-server源码部署指南
运维·服务器·人工智能·ai·ai编程
‎ദ്ദിᵔ.˛.ᵔ₎1 小时前
linux 进程信号(下)
linux·运维·服务器
skywalk81631 小时前
在FreeBSD系统的linux仿真环境下安装和使用kiro 这个亚马逊的AI agent
linux·人工智能·freebsd·kiro
Mikko71 小时前
Linux 磁盘满了但 du 找不到?LVM 扩容 df 不变?fstab 写错开不了机?三台真机实测磁盘排查
linux·运维·centos
蓝胖的四次元口袋1 小时前
Jenkins知识梳理(2)
运维·jenkins
yumgpkpm2 小时前
Acceldata ODP 3.3.6.4 vs CDP Private Cloud Base 7.3.2 对比
大数据·运维·服务器·hadoop·华为·zookeeper·hbase
Madison-No72 小时前
多语言聊天大模型--测试报告
linux·git·python·selenium·jmeter·自动化·postman
Liuqy-052 小时前
特殊进程——孤儿、僵尸、守护进程
linux·运维·服务器
流浪0012 小时前
Linux系统篇47——线程(十二) POSIX 信号量与环形队列,把判空判满提前到访问之前
linux·操作系统·线程·信号量·环形队列
殷色玫瑰2 小时前
AVL树:从平衡因子到四种旋转的完整实现
c语言·数据结构·c++·算法·visualstudio