
LINUX
文章平均质量分 71
linux
TABE_
这个作者很懒,什么都没留下…
展开
-
Linux中进程虚拟内存的布局
操作系统虚拟内存的布局Linux虚拟内存空间布局总览预留段(.reserve)代码段(.text)数据段(.data)数据段(.bss)堆(.heap)栈(.stack)共享库(libc.so)Linux虚拟内存空间布局总览预留段(.reserve)一共占用128M,属于预留空间,进程是禁止访问的代码段(.text)可执行文件加载到内存中的只有数据和指令之分,而指令被存放在.text段中,一般是共享的,编译时确定,只读,不允许修改数据段(.data)存放在编译阶段(而非运行时)就能确定的数据原创 2022-05-04 21:41:02 · 679 阅读 · 0 评论 -
Linux 文件权限
这里写目录标题权限简介更改文件权限mode格式数字格式更改文件拥有者取消文件的权限Linux附加权限suidsgidstickyACL访问控制列表文件权限操作的常用命令权限简介Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。Linux下权限的粒度有拥有者、群组、其它组三种。每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限。通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组。更原创 2022-03-31 21:05:58 · 863 阅读 · 1 评论 -
Linux 进程优先级 NICE、PRI
这里写目录标题NICEPRI实时进程与非实时进程实时进程调度策略非实时进程调度策略CFS完全公平调度NICEnice值应该是熟悉Linux/UNIX的人很了解的概念了,我们都知它是反应一个进程“优先级”状态的值,其取值范围是-20至19,一共40个级别。这个值越小,表示进程”优先级”越高,而值越大“优先级”越低。我们可以通过nice命令来对一个将要执行的命令进行nice值设置,方法是:[root@zorrozou-pc0 zorro]#nice-n 10bash。这样我就又打开了一个bash,并且其ni原创 2022-03-06 18:02:33 · 4210 阅读 · 0 评论 -
Linux wait()/waitpid()
这里写目录标题wait()waitpid()wait()使用wait()函数与waitpid()函数让父进程回收子进程的系统资源,两个函数的功能大致类似,waitpid()函数的功能要比wait()函数的功能更多。所需头文件:#include<sys/types.h>#include<sys/wait.h>函数原型:pid_t wait(int *status)函数参数:status 保存子进程结束时的状态(由exit();返回的值)。使用地址传递,父进程原创 2022-03-03 21:20:33 · 875 阅读 · 0 评论 -
Linux exit()/_exit()
这里写目录标题exit()_exit()exit()和_exit()的区别当我们需要结束一个进程的时候,我们可以使用exit()函数或_exit()函数来终止该进程。当程序运行到exit()函数或_exit()函数时,进程会无条件停止剩下的所有操作,并进行清理工作,最终将进程停止。exit()所需头文件:#include<stdlib.h>函数原型:void exit(int status)函数参数:status 表示让进程结束时的状态(会由主进程的wait();负责接收原创 2022-03-03 21:10:26 · 866 阅读 · 0 评论 -
Linux中父进程与子进程的内存关系
fork()会产生一个和父进程完全相同的子进程,出于效率考虑,linux中引入了写时复制技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。那么一开始子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢?原来在fork之后exec之前两个进程用的是相同的物理空间(内存区),子进程的代码段、数据段、堆栈都是指向父进程的物理空间,也就是说,两者的虚拟空间不同,但其对应的物理空间是同一个。当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间,如果不调用e原创 2022-04-25 20:57:01 · 1660 阅读 · 0 评论 -
Linux exec函数族
如果我们使用fork()函数创建一个子进程,则该子进程几乎复制了父进程的全部内容,也就是说,子进程与父进程在执行同一个可执行程序。那么我们能否让子进程不执行父进程正在执行的程序呢?exec函数族提供了让进程运行另一个程序的方法。exec函数族内的函数可以根据指定的文件名或目录名找到可执行程序,并加载新的可执行程序,替换掉旧的代码区、数据区、堆区、栈区与其他系统资源。这里的可执行程序既可以是二进制文件,也可以是脚本文件。在执行exec函数族函数后,除了该进程的进程号PID,其他内容都被替换了。exec函数原创 2022-03-03 21:00:33 · 871 阅读 · 0 评论 -
Linux fork()/vfork()的区别
这里写目录标题fork函数介绍利用fork()创建父子进程vfork函数介绍利用vfork()创建父子进程fork()和vfork()的主要区别fork函数介绍在Linux系统内,创建子进程的方法是使用系统调用fork()函数。fork()函数是Linux系统内一个非常重要的函数,它与我们之前学过的函数有一个显著的区别:fork()函数调用一次却会得到两个返回值。所需头文件:#include<sys/types.h>#include<unistd.h>函数原型:pid_原创 2022-03-03 20:44:32 · 461 阅读 · 0 评论 -
Linux 创建进程的全部过程(fork()的原理)
创建一个进程可以通过clone(),fork(),vfork()这三个系统调用来完成。而这三个系统调用都是由do_fork()函数来负责处理。在《深入理解Linux内核(第三版)》中写到,实现clone()系统调用的是sys_clone()服务例程,实现fork()系统调用的是clone(),实现vfork()的也是clone()。但是负责处理clone(),fork()和vfork()的函数是do_fork()。概括的流程就是:clone(),fork(),vfork() ——> sys_clone原创 2022-02-28 19:42:45 · 2101 阅读 · 0 评论 -
Linux 进程控制块(PCB)/task_struct
PCB/task_struct进程状态(State)进程调度信息标识符(Identifiers)进程通信有关信息(IPC,Inter_Process Communication)进程链接信息(Links)时间和定时器信息(Times and Timers)文件系统信息(File System)虚拟内存信息(Virtual Memory)页面管理信息对称多处理机(SMP)信息和处理器相关的环境(上下文)信息(Processor Specific Context)其他成员说起进程的结构就不得不提起PCB(进程原创 2022-02-28 20:05:16 · 1777 阅读 · 0 评论 -
Linux分配虚拟内存(申请内存)的两种方式
这里写目录标题申请小于128k的内存申请大于128k的内存释放内存从操作系统角度来看,进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。brk是将数据段(.data)的最高地址指针_edata往高地址推。mmap是在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的虚拟内存。这两种方式分配的都是虚拟内存,没有分配物理内存。在第一次访问已分配的虚拟地址空间的时候,发生缺页中断,操作系统负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。原创 2022-02-23 20:39:28 · 4135 阅读 · 0 评论 -
Linux中进程/线程的实现
这里写目录标题进程描述符task_struct进程描述符中的一些字段进程标识符 PID线程组 / 线程组标识符 tgid进程组 / 进程组标识符 pgrp会话 / 会话标识符 session内存描述符mm线程用户线程内核线程进程描述符task_structLinux 内核涉及进程和程序的所有算法都围绕一个名为 task_struct 的数据结构建立。task_struct 相对较大,在 32 位机器上,它大约有 1.7KB。task_struct 中包含的数据能完整地描述一个正在执行的进程:它打开的文件原创 2022-02-22 20:01:17 · 573 阅读 · 0 评论 -
Linux内核读取文件流程(系统调用)详解
这里写目录标题以linux内核3.13版本为例,首先内核通过系统调用read(),执行sys_read(),在文件linux/fs/read_write.c中://linux/fs/read_write.c SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count){ struct fd f = fdget(fd); //先根据文件描述符fd得到对应的file对象 ssize_t r原创 2022-02-12 13:28:14 · 3040 阅读 · 0 评论 -
kill -9 PID杀死进程使用到的系统调用
这里写目录标题kill命令介绍kill命令的原理信号传递信号处理(内核)kill命令介绍kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行处理。kill(选项)(参数)-a:当处理当前进程时,不限制命令名和进程号的对应关系;-l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称;-p:指定kill 命令只打印相关进程的进程号,而不发送任何信号;-s <信息名称或编号&g原创 2022-02-11 14:29:30 · 8849 阅读 · 1 评论 -
使用GDB调试程序
这里写目录标题gdb参数选项详解源文件编译选项gdb启动参数选项调试命令gdb参数选项详解源文件编译选项gdb主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数即可。如:gcc -g main.c -o main要用gdb调试程序,必须在编译时加上-g和-ggdb选项,如果没有-g,将看不见程序的函数名和变量名,代替它们的全是运行时的内存地址。-g选项的作用是在可执行文件中加入源文件信息,但并不原创 2021-12-12 23:08:54 · 2605 阅读 · 0 评论 -
Shell详解
ShellShell 脚本是什么?什么是默认登录 Shell ?Shell语法注释变量定义变量使用变量只读变量删除变量变量类型常见的编程语言分为两类:一个是编译型语言,如:c/c++/java等,它们远行前全部一起要经过编译器的编译。另一个解释型语言,执行时,需要使用解释器一行一行地转换为代码,如:awk, perl, python与shell等。Shell 脚本是什么?一个 Shell 脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这原创 2021-06-18 22:30:58 · 134 阅读 · 0 评论 -
Linux 各目录的含义和用途
1、/boot 该目录默认下存放的是Linux的启动文件和内核。2、/initrd 它的英文含义是boot loader initialized RAM disk,就是由boot loader初始化的内存盘。在linux内核启动前,boot loader会将存储介质(一般是硬盘)中的initrd文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的initrd文件系统。3、/bin 该目录中存放Linux常用命令的可执行文件,如cp等。4、/sbin 该目录用来存放系统管理员使用的管理程原创 2021-07-21 20:44:17 · 442 阅读 · 0 评论 -
Linux kill命令
kill简介语法参数说明实例简介kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 jobs 指令查看。语法kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]参数说明-l <信息编号> 若不加<信息编号>选项,则 -l 参数会列出全部的信息名称。-s <信息原创 2021-07-18 20:16:51 · 249 阅读 · 0 评论 -
Linux ps命令显示当前进程的状态
ps命令简介语法参数-aux输出格式简介ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。语法ps [options] [--help]参数ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义-A 列出所有的进程-w 显示加宽可以显示较多的资讯-au 显示较详细的资讯-aux 显示所有包含其他使用者的行程-aux输出格式USER PID %CPU %MEM VSZ RSS TTY STAT START TIM原创 2021-07-18 16:59:28 · 782 阅读 · 0 评论 -
Linux ls命令
ls命令简介语法参数文件颜色简介ls(英文全拼:list files)命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。语法 ls [-alrtAFR] [name...]参数-a 显示所有文件及目录 (. 开头的隐藏文件也会列出)-l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出-r 将文件以相反次序显示(原定依英文字母次序)-t 将文件依建立时间之先后次序列出-A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)-F原创 2021-07-17 22:00:23 · 206 阅读 · 0 评论 -
linux后台进程的运行,查看与关闭
linux后台进程相关命令一、&二、ctrl + z三、ps四、jobs五、fg六、bg七、kill八、nohup一、&加在一个命令的最后,可以把这个命令放到后台执行,之后会显示出命令的jobnumber和PID。如watch -n 10 sh test.sh &#每10s在后台执行一次test.sh脚本[1] 2694二、ctrl + z可以将一个正在前台执行的命令放到后台,并且处于暂停状态。三、psps 命令用于显示当前进程(包括前台进程与后台进程)的状原创 2021-05-27 10:52:42 · 958 阅读 · 0 评论 -
Linux 标准输入、标准输出、错误输出及其重定向
这里写目录标题输入重定向输出重定向重定向绑定在linux中,每个进程都会有三个文件,并且这三个文件会进行重定向处理:/dev/stdin -->/proc/self/fd/0 //标准输入,默认为键盘输入/dev/stdout -->/proc/self/fd/1 //标准输出,默认为显示器/dev/stderr -->/proc/self/fd/2 //标准错误输出,有些脚本运行时会报错,就会输入到这。输入重定向输入重定向的基本命令如下:command &原创 2021-05-15 22:12:14 · 3244 阅读 · 2 评论 -
Linux 网络工具——nc命令
功能说明:强大的网络工具语 法:nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]参 数: -g<网关> 设置路由器跃程通信网关,最多可设置8个。 -G<指向器数目> 设置来源路由指向器,其数值为4的倍数。 -h原创 2021-03-18 09:48:56 · 3384 阅读 · 0 评论 -
Linux环境下服务器和客户端的网络通信
套接口描述符使用 sockaddr_in 数据结构,有了套接口之后需要调用bind()函数把套接口绑定到本地计算机的一个接口上,使用inet_addr()函数将普遍形式的IP地址转化为无符号的整型数,调用socket()函数获得文件描述符。程序分为客户端和服务端。应用select函数来实现异步的读写操作。在服务器端:首先先创建套接字,然后绑定,接下进入一个无限循环,用accept函数,接受“连接”请求,然后调用创建线程函数,创造新的线程,进入下一个循环。这样每当有一个新的“连接”被接受都会创建一个新的线程。原创 2021-03-17 19:54:54 · 617 阅读 · 0 评论 -
Linux下编译(头文件),链接(动态库或静态库),运行时(动态库)的搜寻路径顺序
编译时头文件的搜寻路径gcc在编译时按照如下顺序寻找所需要的头文件:1.先搜索当前目录( 这里注意,只有用#include "headfile.h"时才会搜索当前目录 )2.接着搜索-I指定的目录3.然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH4.再找内定目录: /usr/include, /usr/local/include5.最后找gcc的一系列自带目录链接时动态库或静态库的搜寻路径gcc在编译时按照如下顺原创 2021-03-16 20:43:36 · 1121 阅读 · 0 评论 -
Linux下动态链接库与静态链接库(编写、编译)
函数库一般分为静态库和动态库两种。静态库:是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为”.a”。动态库:与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为”.so”,gcc/g++在编译时默认使用动态库。无论静态库,还是动态库,都是由.o文件创建的。动态库的编译:下面通过一个例子来介绍如何生成一个动态库。建一个头文件:dyn原创 2021-03-16 20:05:34 · 4535 阅读 · 1 评论 -
Linux 常用命令
这里写目录标题查看端口被哪个进程占用lsof -i:端口号netstat -tunlp|grep 端口号二级目录三级目录查看端口被哪个进程占用lsof -i:端口号lsof -i:端口号,用于查看某一端口的占用情况,比如查看22号端口使用情况,lsof -i:22,如下图:netstat -tunlp|grep 端口号netstat -tunlp|grep 端口号,用于查看指定端口号的进程情况,如查看22端口的情况,netstat -tunlp|grep 22,如下图:二级目录三级目录原创 2022-03-20 17:01:05 · 1578 阅读 · 0 评论