Linux
文章平均质量分 57
_s瓶子
这个作者很懒,什么都没留下…
展开
-
Linux系统中的三个时间及find指令
1、按文件名查找文件2、按照文件权限查找文件3、查找某一类型的文件(1)、目录(2)、块设备文件 find . -type b(3)、字符设备文件 find . -type c (4)、管道文件 find . -type p (5)、符号链接文件 find . -type l (6)、普通文件原创 2016-07-14 16:53:25 · 641 阅读 · 0 评论 -
线程安全和可重入函数
线程安全: 如果代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和 单线程运行的结果是一样的,而且其他的 变量的值也和预期的是一样的,就是线程安全的。 在单线程运行的情况下,如果Size=0,添加一个元素后,此元素在位置0,而且Size=1;而如果是在多线程情况下,比如有两个线程,线程A先将元素1存放在位置0。但是此时CPU调度线程A暂停,线程B得到运行的原创 2017-04-18 21:57:33 · 265 阅读 · 0 评论 -
精灵(守护)进程及其实现
精灵进程:也称守护进程,是运行在后台的一种特殊进程。它独⽴立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不属于任何一个会话,它自成会话,自成进程组。一般而言,后台进程永远不能退出。所有的精灵进程的父进程都是1,即所有的精灵进程都是孤儿进程。精灵进程一般以d结尾。 用ps axj 来查看精灵进程,如下: Linux大多数服务器都是用精灵进程实现的,比如 Internet服原创 2017-05-11 11:04:16 · 457 阅读 · 0 评论 -
Linux中的mysleep函数
第一个版本: 1、 main函数调用mysleep函数,后者调用sigaction注册了SIGALRM信号的处理函数handler。 2、调用alarm(timeout)设定闹钟。 3、调用pause等待,内核切换到别的进程运行。 4、timeout秒之后,闹钟超时,内核发SIGALRM给这个进程。 5、从内核态返回这个进程的用户态之前处理未决信号,发现有SIGALRM信号,其处理函数是h原创 2017-04-27 16:08:25 · 899 阅读 · 0 评论 -
Linux信号(signal)----信号产生的条件及信号的处理
信号是一种通知机制。一个进程或操作系统或用户向另一个进程发送通知事件的方式。 进程如何知道自己收到信号了,PCB里多了一个信号。 进程在没遇到信号之前就已经知道如何处理信号了,就比如小孩子在没见过红绿灯之前就已经知道红灯停绿灯行的道理。(因为记住了)。 Linux中有62个信号: 1-31号:普通信号 34-64号:实时信号 9号进程永远不会被捕捉到 键盘组合只能向前台进程原创 2017-04-27 16:58:38 · 1606 阅读 · 0 评论 -
I/O多路转接----select的服务器实现
多路:多条独立的i/o流,即读是一条流(称之为读流,比如输入流),写是一条流(称之为写流,比如输出流),异常也是一条流(称之为异常流),每条流用一个文件描述符来表示,同一个文件描述符可以同时表示读流和写流。select:系统提供select函数来实现多路复用输入/输出模型。select系统调用是⽤用来让我们的程序监视多个文件句柄的状态变化的。 程序会停在select这里等待,直到被监视的文件句柄有原创 2017-06-07 15:33:12 · 383 阅读 · 0 评论 -
文件描述符重定向---dup&dup2
dup和dup2都是用来复制一个文件的描述符。它们经常用来重定向进程的stdin、stdout和stderr。这两个函数的原形及描述如下: 输出重定向#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<fcntl.h>#include<string.h>int main(int argc,char *argv[]原创 2017-06-07 17:05:02 · 317 阅读 · 0 评论 -
shell进度条以及shell中背景和字体颜色的设置
代码如下: 运行结果: 颜色设置有如下选项: 将字体颜色设置为某种颜色,例:紫色 注意注意:空格#!/bin/bashbuf="hello world"while :do sleep 4 printf "\e[35m %s \e[0m\n" "$buf"done设置背景颜色,将背景设置为红色,字体颜色未做修改#!/bin/bashbuf="hello w原创 2017-06-29 13:10:59 · 425 阅读 · 0 评论 -
I/O多路转接之epoll
epoll工作原理: epoll同样只告知那些就绪的文件描述符,而且当我们调用epoll_wait()获得就绪文件描述符时,返回的不是实际的描述符,而是一个代表就绪描述符数量的值,你只需要去epoll指定的一个数组中依次取得相应数量的文件描述符即可。epoll的相关系统调用:1、 int epoll_create(int size):创建一个epoll的句柄,size可忽略。当创建好epoll句柄原创 2017-06-09 18:25:12 · 202 阅读 · 0 评论 -
硬链接与软链接
在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。 链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic l原创 2017-07-01 22:34:35 · 319 阅读 · 0 评论 -
I/O多路转接之poll
poll采用了一个单独的结构体pollfd数组,由fds指针指向这个组。pollfd结构体定义如下: struct pollfd { int fd; //文件描述符 short events; //当下文件描述符关心的事件 short revents; //文件描述符关心的事件就绪 }; 每一个pollfd结构体指定了一个被监视的文件描述符,可以传递多个结构体,指示poll()监视多个文原创 2017-06-11 15:47:14 · 236 阅读 · 0 评论 -
linux系统约定不同类型文件默认的颜色
•白色:表示普通文件•蓝色:表示目录•绿色:表示可执行文件•红色:表示压缩文件•浅蓝色:链接文件•红色闪烁:表示链接的文件有问题•黄色:表示设备文件•灰色:表示其它文件原创 2017-06-14 16:50:33 · 281 阅读 · 0 评论 -
Shell脚本基础
shell属于解释性语言,shell脚本不需要编译,不需要声明,无数据类型,但需要解释器解释shell脚本的执行有以下几种方法: 本来创建一个文件夹,创建一个文件并将“hello world”写进文件需要执行三次,但如下写入shell脚本中,只需执行一次。 变量引用,在定义变量时不用,取变量值时要用 ,取变量值时要用。和C语言不同的是,Shell变量不需要明确定义类 型,事实上Shell变量的值原创 2017-06-15 16:15:12 · 291 阅读 · 0 评论 -
crond服务和crontab命令
**crond服务:**crond是Linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。linux系统调度可分为以下两类: 系统任务调度: 系统周期性所要执行的工作,比如写缓存数据到硬原创 2017-07-08 15:06:36 · 552 阅读 · 0 评论 -
Linux环境下如何终止后台进程
这里提供两种方法来终止后台进程。 一、打开另一个终端,用kill命令发送9号信号给当前进程(已经终止,还需Ctrl+C退出)。具体如下: Ctrl+C不能终止后台进程, 如图: 使用kill命令终止该进程( kill -9 4451),如图: 二、用fg 1将该进程放到前台,然后用组合键Ctrl+C终止。具体如下: 注:如下图所示,&在这里表示该原创 2017-04-18 22:50:50 · 11990 阅读 · 0 评论 -
Linux线程的概念及线程的控制
线程分为主线程和新线程,谁先运行是随机的,由调度器决定。 线程强调资源共享,进程强调资源独占。 但有些资源是每个线程各有一份的:线程id;上下文,包括各种寄存器的值、程序计数器和栈指针;栈空间;errno变量;信号屏蔽字;调度优先级。 线程共享资源:⽂件描述符表、每种信号的处理⽅式、当前工作⽬录、用户id和组id 线程库函数pthread是由POSIX标准定义的,在Linux下线程函数位于l原创 2017-03-23 20:22:09 · 293 阅读 · 0 评论 -
多线程中的并发、并行、同步、异步
并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥互斥:进程间相互排斥的使用临界资源的现象,就叫互斥。同步:进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具有同步关系的一组并发进程相互发转载 2017-04-07 21:27:31 · 273 阅读 · 0 评论 -
Linux进度条以及makefile相关知识
在Linux环境下实现进度条,其原理是:用sleep函数或usleep函数控制每隔多长时间输出一次,每次输出字符会比上次输出字符多一个。在此代码中,用\r而不用\n的原因:\n表示换行,\r原创 2017-02-16 20:16:43 · 598 阅读 · 0 评论 -
Linux系统中的进程调度算法
在操作系统中,调度是指一种资源分配,因而调度算法是指:根据系统的资源分配策略所规定的资源分配算法,对于不同的系统和系统目标,通常采用不同的调度算法。以下就Linux的进程调度算法加以解释。 一、以下算法用于实时系统 1、 时间片轮转调度算法(round-robin):SCHED_RR,系统使每个进程依次地按时间片轮流执行的方式。该算法的基本思想是,将CPU原创 2017-02-19 12:17:06 · 2135 阅读 · 0 评论 -
Linux中task_struct结构体字段分析
task_struct:是Linux内核的一种数据结构。它放在RAM(运行内存)里并包含着进程的信息。每个进程都把自己的信息放在task_struct数据结构里。task_struct字段分析如下:task_struct //进程描述符Struct task_struct{1、支持对称多处理器方式(SMP)时的数据成员 (1)、int processor; //进程原创 2017-02-18 08:36:03 · 1827 阅读 · 0 评论 -
Linux管道容量
管道容量(转自:http://blog.chinaunix.net/uid-27471192-id-3305880.html)根据手册,linux上的PIPE容量为(capacity)65536个字节;实验得到ubuntu的PIPE_BUF为4096。这里要特别说明的是我看到网上有人将这个Capacity和PIPE_BUF混淆了,当管道的写端存在时,如果请求的字节数转载 2017-03-03 13:54:44 · 4485 阅读 · 0 评论 -
Linux进程间通信(一)-------管道
进程有独立性,有自己的PCB和地址空间,彼此之间不会互相干扰。进程间通信的原理(本质):想办法让不同的进程看到一份公共的系统资源(数据)。注:这份资源通常由操作系统提供,该资源不属于任何一个进程。该资源是有由某种方式提供的缓冲区。 系统公共区域提供模块的的不同导致了通信方式的不同。管道(pipe):是最基本的IPC机制,也是一种文件。管道的特点:管道只允许单向原创 2017-03-03 13:38:08 · 326 阅读 · 0 评论 -
进程间通信(三)-----共享内存
共享内存:使得多个进程可以访问同⼀一块内存空间,是最快的可⽤用IPC形式。是针对其他通信机制运⾏行效率较低⽽而设计的。往往与其它通信机制,如信号量结合使⽤用,来达到进程间的同步及互斥。共享内存应开辟到地址空间堆栈之间的区域,即0-3G的用户区生命周期:随内核comm.h#ifndef _COMM_H_#define _COMM_H_#define PATHNAME "."#d原创 2017-03-17 22:23:10 · 232 阅读 · 0 评论 -
Linux进程程序替换以及简单的shell
进程程序替换:程序从硬盘加载到内存中并通过地址空间映射。进程程序替换过程只是将代码和数据替换,并没有创建新的进程,因为pid不变。exec函数家族包括6种:execl、execlp、execle、execv、execvp、execveexecve是最标准的系统调用函数,前5种都是基于execve函数。只要exec函数调用成功,后续代码全部失效,所以不需要返回值来判断其是原创 2017-03-01 19:01:18 · 1231 阅读 · 0 评论 -
Linux中的file_struct、t命令以及atexit函数有关知识
1、struct file结构体定义在include/Linux/fs.h中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核创建和驱动源码中,struct file的指针通常被命名为file或filp。如下所示:st原创 2017-02-20 11:41:27 · 458 阅读 · 0 评论 -
进程间通信(四)------消息队列
消息队列:消息队列提供了一种从⼀个进程向另⼀个进程发送⼀个数据块的⽅方法。每个数据块都被认为是有⼀个类型,接收者进程接收的数据块可以有不同的类型值。可以通过发送消息来避免命名管道的同步和阻塞问题。 特点:基于消息;是用链表实现的;生命周期随内核 每个消息的最⼤大长度是有上限的(MSGMAX) 每个消息队列的总的字节数是有上限的(MSGMNB) 系统上消息队列的总数也有⼀一个上限(MSGMNI原创 2017-03-21 15:52:28 · 239 阅读 · 0 评论 -
进程间通信(二)----信号量
信号量,本质是一个计数器,这个计数器用来描述临界资源的数目;原子性,要么读(写)完,要么不读(写);信号量既是用来解决进城同步与互斥问题的机制,也可以实现进程间通信;临界资源:不同进程能够看到的同一份资源;临界区:双方访问临界资源的那份代码(read、write);通过保护临界区来保护临界资源;互斥:任何时刻只有一个进程原子性的访问临界资源;饥饿:长时间未得到某种资原创 2017-03-11 16:08:55 · 405 阅读 · 0 评论 -
经典生产者与消费者问题(线程的同步与互斥)
互斥:保证一个资源只能被一个进程使用。 首先,解释“321”: 1、一个交易场所(缓冲区,类似于超市) 2、两种角色:生产者(生产数据)与消费者(消费数据) 3、三种关系:生产者与生产者互斥 消费者与消费者互斥 生产者与消费者同步与互斥 在未做任何处理之前让生产者生产数据,消费者消费数原创 2017-04-06 23:05:29 · 7649 阅读 · 0 评论 -
死锁产生的原因、条件及死锁的避免和预防
死锁:一组进程中,每个进程都无限等待被该组的另一个进程所占有的资源,因而永远无法得到资源的现象被称为进程死锁,这组进程被称为死锁进程。 可形象将死锁状态描述为: A和B两个人都没有礼貌,都不愿给彼此让路,所以A和B都在等对方让路,导致谁也过不去。 死锁产生的原因: 1、竞争资源,系统提供的资源数量有限,不能满足每个进程的需求。 2、多道程序运行时,进程推进顺序不合理。 死锁产生的条件:原创 2017-03-30 16:11:54 · 1489 阅读 · 0 评论 -
经典读者写者问题
读者:只读数据区中的数据 写者:只往数据区中写数据 要求: (1)允许多个读者同时执行读操作; (2)不允许读者、写者同时操作; (3)不允许多个写者同时操作。 在编写多线程的时候,有种很常见的场景,就是公共数据被修改的机会比较少(即写的几率小),相对写,读的几率反而高,在读的过程中,往往伴随着查找的操作,中间耗时很长。给这种代码段加锁,会极⼤大地降低我们程序的效率。故引入读写锁来解决多原创 2017-04-07 18:49:37 · 516 阅读 · 0 评论 -
shell字符串截取
对字符串的截取,是针对“行”来的分析的。 我们可以用cut命令来进行截取。 cut -c :以字符为单位取出固定字符区间 注:“-”表示截取第1和第4个之间所有的字符 “,”表示截取第1个和第6个字符 cut -d : 以某个字符为分隔符,打印指定列 注:以“,”为分隔符,显示第二列 以“:”为分隔符,显示第一列和第二列cut -原创 2017-07-09 12:38:28 · 314 阅读 · 0 评论