Linux
文章平均质量分 74
qq_37924645
这个作者很懒,什么都没留下…
展开
-
【Linux】初识task_struct结构体
广义上,所有的进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。原创 2017-04-04 21:57:18 · 207 阅读 · 0 评论 -
【Linux】调研 crond 和 crontab
一、概念1. 定义 crond 是 Linux 系统用来定期执行命令或指定程序的服务的一种服务或软件。一般情况下当我们安装完成 Linux 操作系统之后,默认便会启动 Crond 任务调用服务。Crond 服务会定期(默认一分钟检查一次)检查系统中是否有要执行的任务工作。如果有,便根据其预先设定的定时任务规则自动执行该定时任务工作。这个 Crond 定时服务就像闹钟。原创 2017-06-28 16:57:38 · 266 阅读 · 0 评论 -
【Linux】实现睡眠函数mysleep
1. 普通版本的 mysleep 函数(有 bug 存在)代码如下:vim mysleep.cvim Makefile运行结果如下:我们可以发现当我们的代码运行以后,屏幕上输出很多的 using mysleep sleep! ,而且在最后一行每隔三秒打印一次,且一直打印直到我们强制停止。审视 “mysleep” 程序,设想这样的时序:原创 2017-06-29 10:34:20 · 564 阅读 · 0 评论 -
【Linux】子进程的异步等待方式
子进程在终止时会给父进程发 SIGCHLD 信号,该信号的默认处理动作是忽略,父进程可以自定义 SIGCHLD 信号的处理函数,这样父进程只需专心处理自己的工作,不必关心子进程了,子进程终止时会通知父进程,父进程在信号处理函数中调用 wait 清理子进程即可。一、子进程退出时给父进程发送信号二、父进程异步等待子进程原创 2017-06-29 11:50:49 · 285 阅读 · 0 评论 -
【Linux】守护进程
1. 守护进程的概念:守护进程(Daemon)是一种运行在后台的一种特殊的进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。由于在Linux中,每个系统与用户进行交流的界面成为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且原创 2017-06-27 15:10:32 · 192 阅读 · 0 评论 -
【Linux】TCP 三次握手与四次挥手
1. TCP 连接建立与释放2. 为什么要三次握手?第一次握手: 客户端先发送一个 SYN 请求(SYN=1 表示该报文是一个连接请求报文),发送的序号 seq=x(x 是系统自己选定的大小),SYN 虽然不携带数据但是会消耗一个序列号。当客户端的 SYN 请求发送出去之后,客户端进入 SYN-SENT 状态。 第二次握手: 服务器端收到客户原创 2017-07-10 19:31:21 · 215 阅读 · 0 评论 -
【Linux】epoll 服务器
vim epoll_server.c运行结果如下:原创 2017-07-12 17:37:47 · 250 阅读 · 0 评论 -
【Linux】TCP 客户端与服务器端通信
第一种版本:vim tcp_server.cvim tcp_client.c运行结果如下:原创 2017-07-06 10:31:38 · 462 阅读 · 0 评论 -
【Linux】UDP 服务器端与客户端通信
vim udp_server.cvim udp_client.c运行结果如下:udp 不可靠,那么如何在用户空间实现可靠性呢? udp 不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用 UDP 较多,因为它们即使偶尔丢失原创 2017-07-10 17:32:39 · 1107 阅读 · 0 评论 -
【Linux】命令代换
1. `` 和 $() 由反引号 `` 括起来的也是一条命令,Shell 先执行该命令,然后将输出结果立刻代换到当前命令行中。例如定义一个变量存放 date 命令的输出:命令代换用 `` 表示:DATE=`date`命令代换也可以用 $() 表示:DATE=$(date)原创 2017-07-12 22:54:18 · 248 阅读 · 0 评论 -
【Linux】进度条
1. 基本语法2. 进度条实现普通进度条:实现彩色进度条:这里的 m 值即 color 采用了取模运算, 是为了让进度条八种颜色不断变换达到彩色效果。进度条颜色设置:shell 脚本中 echo 显示内容带颜色显示,echo 显示带颜色,需要使用参数 -e ,-n原创 2017-07-14 10:37:52 · 362 阅读 · 0 评论 -
【Linux】互斥锁
mutex (互斥量)多个线程同时访问共享数据时可能会冲突,比如 两个线程都要把某个全局变量增加 1,这个操作在某平台需要三条指令完成:1. 从内存读变量值到寄存器2. 寄存器的值加13. 将寄存器的值写回内存对于多线程的程序,访问冲突的问题是很普遍的,解决的办法是引入互斥锁(Mutex,Mutual Exclusive Lock),获得锁的线程可以完成“读-修改-写”的操作,原创 2017-05-30 20:54:19 · 254 阅读 · 0 评论 -
【Linux】shell 语法
1. 条件测试:test 和 [ 命令 test 或 [ 可以测试一个条件是否成立,如果测试结果为真,则该命令的退出码为 0,如果测 试结果为假,则命令的退出码为 1 (与C语言的逻辑表示正好相反)。 当我们在进行比较时,不能使用 C 语言风格的 ==、!= ,而要使用 -eq(等于)、-ne(不等于)、-gt(大于)、-ge(大于等于)、-lt(小于)、-le(小于等于)。 $? 表示上一条命令的退出码,echo $? 查看命令结果成功与否。0 真,非 0 假。原创 2017-07-14 17:22:43 · 329 阅读 · 0 评论 -
【Linux】管道--实现进程间通信
管道是一种最基本的 IPC 机制,由 pipe 函数创建:#include int pipe(int filedes[2]);调用 pipe 函数时在内核中开辟一块缓冲区(称为管道)用于通信,它有一个读端一个写端,然后通过 filedes 参数传出给用户程序两个文件描述符,filedes[0] 指向管道的读端,filedes[1] 指向管道的写端。所以管道在用户程序看起来就像一个原创 2017-05-09 22:13:12 · 338 阅读 · 0 评论 -
【Linux】信号量--实现进程间通信
信号量的本质是一个计数器,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量在此过程中负责数据操作的互斥、同步等功能。当请求一个使用信号量来表示的资源时,进程需要先读取信号量的值来判断资源是否可用。大于 0,资源可以请求;等于 0,无资源可用,进程会进入睡眠状态直至资源可用。当进程不再使用一个信号量控制的共享资源时,信原创 2017-05-19 20:36:59 · 552 阅读 · 1 评论 -
【Linux】编写一个进度条
1. 我们可以先看下自己的虚拟机上创建过什么目录或者文件,然后新建一个目录,并进入它。如下我创建了一个 zll 的目录,接着可以在此目录下创建文件 Makefile 和 proc_bar.c ,也可以在创建完后进行查看(这只是个人习惯)。当然你也可以直接创建目录和文件,不必如此繁琐。2. 用 vim 进入文件 proc_bar.c ,编写实现进度条的代码,保存并退出。3.原创 2017-04-04 19:45:48 · 254 阅读 · 0 评论 -
【Linux】使用vim编写一个程序,gcc查看预处理、编译、汇编、链接过程
1. 在linux环境实践,使用vim编写一个程序,然后使用gcc查看【预处理】、【编译】、【汇编】、【链接】各阶段文件的内容,并熟悉相关指令。预处理:gcc -E test.c -o test.i编译: gcc -S test.i -o test.s汇编: gcc -c test.s -o test.o链接: gcc原创 2017-04-12 21:50:21 · 1981 阅读 · 1 评论 -
【Linux】vim的配置
由于我们Linux自带的vim配置比较简陋,我们需要自己进行各种配置和插件的安装,把vim配置的几乎可以和windows下的IDE相媲美,那么具体实现步骤是怎样的呢?首先,输入 su 进入 root 用户,用 cd /etc 进入根目录下的 etc/ 目录,用 ls -a 列出所有文件(包含隐藏的文件),此时就会发现一个文件名为 vimrc的文件(或者是.vimrc),这就是存放Linux原创 2017-03-28 19:45:52 · 426 阅读 · 0 评论 -
【Linux】初识find命令和粘滞位
1.find指令Linux下find命令在目录结构中搜索文件,并执行指定的操作。1)命令格式:find pathname -options [-print -exec -ok ...] 即 find 查找目录 [查找规则]2)命令功能:用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)。3)命令参数:-pathname: find命令所查找的目原创 2017-03-24 23:36:20 · 242 阅读 · 0 评论 -
【Linux】权限和三个时间
1.进入某个目录需要什么权限?答:可执行权限。2.在目录内创建文件、查看文件需要什么权限?答:创建文件需要写权限和可执行权限,查看文件需要读权限和可执行权限。3.Linux下三个时间所代表的的含义以及如何修改特定的时间,加以验证。原创 2017-03-19 13:08:07 · 751 阅读 · 0 评论 -
【Linux】僵尸进程和孤儿进程
在我们进行关于僵尸进程和孤儿进程的分析前,先了解下进程都有哪些状态:下面的状态在 fs/proc/array.c 文件里定义:/** The task state array is a strange "bitmap" of* reasons to sleep. Thus "running" is zero, and* you can test for combinations of原创 2017-04-14 13:03:52 · 384 阅读 · 0 评论 -
【Linux】管道容量及缓冲区的存储方式
1.管道容量管道容量分为 pipi capacity 和pipe_buf,这两者的区别在于 pipe_buf 定义的是内核管道缓冲区的大小,这个值的大小是由内核设定的,这个值仅需一条命令就可以查到,而 pipe capacity 指的是管道的最大值,即容量,是内核内存中的一个缓冲区。pipe_buf 命令:ulimit -a原创 2017-05-14 17:07:47 · 1862 阅读 · 0 评论 -
【Linux】共享内存--实现进程间通信
使得多个进程可以访问同一块内存空间,是最快的可用 IPC 形式。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。原创 2017-05-19 20:53:37 · 429 阅读 · 0 评论 -
【Linux】File 结构体,和 fd 的关系
File 结构体1.1 struct file struct file 结构体定义在 include/linux/fs.h 中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核创建和驱动源码中,str原创 2017-04-25 22:10:56 · 652 阅读 · 0 评论 -
【Linux】atexit 的验证
在我们进行进程终止的分析前,先引入一下关于 main 函数的知识:当内核使用一个 exec 函数执行 C 程序时,在调用 main 函数之前先调用一个特殊的启动例程,可执行程序将此例程指定为程序的起始地址。启动例程从内核获取命令行参数和环境变量,然后为调用 main 函数做好准备。引入 main 函数的知识是因为我们最常接触的就是 main 函数的返回,以 main 函数的返回 return 进行引入更能容易理解进程终止的概念。接下来我们介绍下进程终止吧。进程终止的方式有8种:1. 从 main原创 2017-04-24 19:20:04 · 211 阅读 · 0 评论 -
【Linux】线程属性控制
1.概念多线程的控制流程可以长期并存,操作系统会在各线程之间调度和切换,就像在多个进程之间调度和切换一样。由于同一进程的多个线程共享同一地址空间,因此 Text Segment、Data Segment 都是共享的,如果定义一个函数,在各线程中都可以调用,如果定义一 个全局变量,在各线程中都可以访问到,除此之外,各线程还共享以下进程资源和环境:(1)文件描述符表(2)每种信号的处理方式原创 2017-05-27 13:25:45 · 179 阅读 · 0 评论 -
【Linux】消息队列--实现进程间通信
定义:消息队列提供了一种从一个进程向另一个进程发送一个有类型数据块的方法。原创 2017-05-15 19:51:36 · 329 阅读 · 0 评论 -
【Linux】Shell--支持重定向
用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往 要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。其实有六种以exec开头的函数,统称exec函数:#include int execl原创 2017-05-15 19:45:16 · 174 阅读 · 0 评论