Linux
Noone0^
欲渡黄河冰塞川,将登太行雪满山。
展开
-
Linux进程间通信--消息队列
Linux进程间通信--消息队列消息队列(message queue)1.特点2.消息队列的使用消息队列的格式ftok()函数获取键值msgget()函数msgsnd()函数msgrcv()函数msgctl()函数3.模拟实现消息队列消息队列(message queue)消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。消息队列是消息的链接表,存放在内核中并由消息队列标识符标识。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管原创 2020-12-12 11:18:36 · 221 阅读 · 0 评论 -
Linux进程间通信--共享内存
Linux进程间通信--共享内存共享内存(Shared Memory)1.通信原理2.为什么共享内存通信最快?3.特征&优缺点4.共享内存的使用5.共享内存操作流程6.操作共享内存的函数创建共享内存:shmget()函数将共享内存映射到地址空间:shmat()函数解除内存映射:shmdt()函数控制共享内存:shmctl()函数ftok()函数指定key值7.共享内存实现共享内存(Shared Memory)共享内存就是允许多个不相关的进程访问同一个逻辑内存。 共享内存是在两个正在运行的进程之间原创 2020-12-12 09:40:37 · 330 阅读 · 0 评论 -
Linux进程间通信--管道
Linux进程间通信①--管道1.进程间通信目的2.管道2.1匿名管道(pipe)基本特征管道自带同步和互斥读写规则匿名管道的创建pipe()匿名管道基于fork()的使用2.2命名管道(named pipe)基本特征打开/读写规则命名管道的创建命名管道实现无亲缘关系的进程间通信3.总结1.进程间通信目的数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)进程原创 2020-10-16 16:58:11 · 234 阅读 · 0 评论 -
Linux文件IO--文件描述符/重定向
Linux文件IO--文件描述符/重定向1.基础IO1.1C语言文件IO1.2Linux系统文件IO1.3Linux 系统调用与C库函数对比打开文件1.基础IO1.1C语言文件IO给一个testio.txt写入Hello World:通过操作文件流指针完成。#include<stdio.h>#include<string.h>int main(){ FILE* fp = fopen("testio.txt", "w+"); if(fp == NULL){原创 2020-10-12 15:24:43 · 407 阅读 · 0 评论 -
Linux进程程序替换
Linux进程程序替换1.进程程序替换1.1为什么要进行进程程序替换1.2进程替换的原理2.替换函数exec函数族2.1execv2.2execl2.3execvp/execlp2.3execve/execle1.进程程序替换1.1为什么要进行进程程序替换fork()创建子进程后,创建的子进程要么和父进程执行一样的代码,要么执行不同的代码分支(通过fork的返回值控制),但这样还是不够灵活。假如有很多的功能已经用别的程序实现好了,那么就不需要在父进程中控制子进程执行不同的代码分支,让子进程在自己的分支原创 2020-10-11 16:43:33 · 408 阅读 · 0 评论 -
Linux进程退出--_exit()&exit()
Linux进程退出1.退出场景2.进程常见的退出方法2.1正常退出2.2异常退出3.信号处理程序4._exit()系统调用接口5.exit()函数6._exit()和exit()的区别1.退出场景正常符合预期退出正常不符合预期退出(结果不正确)异常退出:执行过程中异常奔溃, 还未执行完2.进程常见的退出方法2.1正常退出main函数返回 ( return )调用 exit( int status )函数使用 _exit( int status )系统调用接口可以使用ench $?原创 2020-10-10 22:00:02 · 1662 阅读 · 0 评论 -
Linux进程等待--wait()&waitpid()
Linux进程等待1.进程等待1.1 基本概念1.2 进程等待的必要性2.进程等待的方法2.1 wait等待2.2 waitpid等待获取子进程status3.模拟实现1.进程等待1.1 基本概念进程退出时会关闭所有文件描述符,释放在用户空间分配的内存,但是PCB会暂时保留,里面存放退出状态。比如一个进程正常退出, PCB里就存放进程的退出状态(退出码);如果是异常退出,那么PCB里存放导致该进程终止的信号。子进程的退出状态应该是由父进程回收的,也就是父进程必须得等待子进程退出,接收子进程的退出状态。原创 2020-10-10 18:58:45 · 390 阅读 · 0 评论 -
Linux进程优先级
Linux进程优先级1.进程优先级1.1 基本概念1.2 优先级取值范围2.查看进程优先级1.进程优先级1.1 基本概念由于系统中进程数量众多,而CPU资源比较少甚至只有一个,进程之间需要竞争来使用CPU。这时让一个比较重要、需要优先执行的进程去和其他进程竞争,显然是不合理的。为了更合理的分配CPU资源, 就有了进程优先级。优先级高的进程有优先执行的权利。此外,优先级还影响分配给进程的时间片长短。 重要的进程,应该分配多一些cpu时间片,好让其尽快完成任务。所有的进程都会有机会运行,但优先级高的进程原创 2020-10-10 14:49:04 · 2462 阅读 · 0 评论 -
Linux进程状态
Linux进程状态1.进程状态2.运行状态R3.睡眠状态S(可中断睡眠)4.磁盘休眠状态D(不可中断睡眠)5.停止状态(T) & 跟踪状态(t)6.死亡状态X(退出状态)7.僵死状态Z8.僵尸进程孤儿进程1.进程状态状态在Kernel源码中的定义:static const char * const task_state_array[] = { "R (running)", "S (sleeping)", "D (disk sleep)", "T (stop原创 2020-10-09 21:45:31 · 302 阅读 · 0 评论 -
Linux进程创建--fork()
Linux进程创建--fork函数1.创建进程1.1 fork()函数1.2 fork()的返回值2.fork的写时拷贝策略3.fork失败原因fork用法1.创建进程我们说过一个进程就是一个PCB,即一个task_struck结构体,那么创建进程也就是创建一个task_struck结构体。在Linux中我们常用fork()函数来创建进程。1.1 fork()函数从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。fork()在函数内部会调用clone这个系统调用接口。#include原创 2020-10-07 16:58:44 · 702 阅读 · 0 评论