![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux相关
文章平均质量分 72
cws1214
这个作者很懒,什么都没留下…
展开
-
无锁编程实例
最近在研究nginx的自旋锁的时候,又见到了GCC CAS原子操作,于是决定动手分析下CAS实现的无锁到底性能如何,网上关于CAS实现无锁的文章很多,但少有研究这种无锁的性能提升的文章,这里就以实验结果和我自己的理解逐步展开。1.什么是CAS原子操作在研究无锁之前,我们需要首先了解一下CAS原子操作——Compare & Set,或是 Compare & Swap,现在转载 2015-08-15 12:26:43 · 1173 阅读 · 0 评论 -
设置程序及链接库环境变量
#在PATH中找到可执行文件程序的路径。export PATH =$PATH:$HOME/bin#gcc找到头文件的路径C_INCLUDE_PATH=/usr/include/libxml2:/MyLibexport C_INCLUDE_PATH#g++找到头文件的路径CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/inclu转载 2013-10-28 10:08:44 · 1768 阅读 · 0 评论 -
cannot find lua等问题解决
1.cannot find -llua以及 lua.h no such file 最好直接apt-get install lua,从官网下载后,make linux & make installcp lauxlib.h、lua.h、luaconf.h、lualib.h lua.hpp /usr/local/includecp liblua.a /usr/local/lib原创 2013-10-25 15:16:46 · 11174 阅读 · 0 评论 -
使用truss、strace或ltrace诊断"疑难杂症" Segmentation fault排查
进程无法启动,软件运行速度突然变慢,程序的"Segment Fault"等等都是让每个Unix系统用户头痛的问题,本文通过三个实际案例演示如何使用truss、strace和ltrace这三个常用的调试工具来快速诊断软件的"疑难杂症"。truss和strace用来 跟踪一个进程的系统调用或信号产生的情况,而 ltrace用来 跟踪进程调用库函数的情况。truss是早期为System V R4转载 2013-09-23 16:24:03 · 2258 阅读 · 0 评论 -
gcc的一些编译优化特性
GCC 和 Linux 是出色的组合。尽管它们是独立的软件,但是 Linux 完全依靠 GCC 在新的体系结构上运行。Linux 还利用 GCC 中的特性(称为扩展)实现更多功能和优化。本文讨论一些重要的扩展,讲解如何在 Linux 内核中使用它们。GCC 当前的稳定版本(版本 4.3.2)支持 C 标准的三个版本:International Organization for转载 2013-09-25 14:45:59 · 2077 阅读 · 0 评论 -
无锁编程
非阻塞型同步 (Non-blocking Synchronization) 简介如何正确有效的保护共享数据是编写并行程序必须面临的一个难题,通常的手段就是同步。同步可分为阻塞型同步(Blocking Synchronization)和非阻塞型同步( Non-blocking Synchronization)。阻塞型同步是指当一个线程到达临界区时,因另外一个线程已经持有访问该共享数据转载 2013-09-23 15:23:39 · 830 阅读 · 0 评论 -
子进程信号处理及wait waitpid区别
当一个进程正常或异常终止时,内核就向父进程发送SIGCHLD信号,因为子进程终止是个异步事件,可以在父进程运行的任何时候发生,所以这种信号也是内核向父进程发的异步通知,父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用执行的函数(即信号处理程序),对于这种信号,系统的默认动作是忽略他。二、waitpid_t wait (int * status);定义于原创 2013-09-23 10:09:03 · 3738 阅读 · 0 评论 -
vim一些很实用的快捷键
配置君在.vimrc下实现,如果当前用户目录下没有这个文件,可自行建立并写入内容到该文件中,使用source .vimrc来生效。鼠标支持不管是文本界面还是图形界面的 Vim,都支持鼠标。不过,在文本界面中,鼠标支持缺省没有被激活;这就意味着,在终端上使用鼠标,所有的功能仍和没有使用 Vim 时相同,并不受 Vim 影响。要激活文本界面中的鼠标支持也很容易,只需要执行一句“:s转载 2013-09-23 17:22:42 · 1120 阅读 · 0 评论 -
查看进程所占fd数和修改系统配置的方法
在Linux下,我们使用ulimit -n 命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。 对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many f转载 2013-09-22 09:30:31 · 13743 阅读 · 0 评论 -
rsyslog相关
rsyslog会出现imuxsock begins to drop messages from pid类似错误,解决方法是:echo "$SystemLogRateLimitInterval 60" >> /etc/rsyslog.confecho "$SystemLogRateLimitBurst 3000" >> /etc/rsyslog.conf重启r原创 2013-09-16 14:53:53 · 965 阅读 · 0 评论 -
cvs使用
10.4. 基本的 CVS 命令配置好系统的 CVS 访问之后,检出要处理的模块。技巧关于是否需要设置 $CVSROOT 环境变量,或命令行选项 -m repository,应当看当前工作目录是否有一个 CVS/ 子目录。如果有 CVS/ 子目录,CVS 忽略任何 $CVSROOT 或 -m 命令行选项设置。转载 2013-10-28 10:09:01 · 737 阅读 · 0 评论 -
u盘win7安装双系统
1.下载ubuntu iso文件,我是12.04,最新的13.04现在目前还有不少问题,例如bcd2.制作u盘安装系统,就是把u盘制作成启动盘,工具===========================待重写代码:bcdedit空格/create空格/d "GRUB4DOS"空格/application bootsector命令结果应该会返回一个GUID原创 2013-09-17 18:01:09 · 824 阅读 · 0 评论 -
线程池简介
线程池的技术背景在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些"池化资源"技术产生的原因。比如转载 2013-10-29 12:34:01 · 704 阅读 · 0 评论 -
无锁编程和有锁编程效率对比
最近维护的一个网络服务器遇到性能问题,于是就对原有的程序进行了较大的框架改动。改动最多的是线程工作模式与数据传递方式,最终的结果是改变锁的使用模式。经过一番改进,基本上可以做到 GMb 网卡全速工作处理。在 性能达标之后,一度在想有没有什么办法使用更加轻量级锁,或者去掉锁的使用,为此搜索一些相关的研究成果,并做了一些实验来验证这些成果,因而就有这篇文章。希望有做类似工作的同行可以有所借鉴。如果有人转载 2015-08-15 12:10:18 · 5611 阅读 · 1 评论 -
读写锁的实现
首先介绍下pthread_cond_t。 在Linux下称之为状态变量,与之相关的有下面几个API: int pthread_cond_init (pthread_cond_t *COND,pthread_condattr_t *cond_ATTR); int pthread_cond_signal (pthread_cond_t *COND); int pthr转载 2015-08-13 09:14:15 · 363 阅读 · 0 评论 -
linux进程状态及切换
1.进程的三种基本状态 进程在运行中不断地改变其运行状态。通常,一个运行进程必须具有以下三种基本状态。 就绪(Ready)状态 当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。 执行(Running)状态当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。 阻塞(Bloc转载 2015-05-16 17:18:20 · 1205 阅读 · 0 评论 -
ps aux各参数意义
USER 进程的属主;PID 进程的ID;PPID 父进程;%CPU 进程占用的CPU百分比;%MEM 占用内存的百分比;NI 进程的NICE值,数值大,表示较少占用CPU时间;VSZ 該进程使用的虚拟內存量(KB);RSS 該進程占用的固定內存量(KB)(驻留中页的数量);TTY 該進程在那個終端上運行(登陸者转载 2014-10-21 13:14:40 · 2989 阅读 · 0 评论 -
linux查看进程运行路径
在linux下查看进程大家都会想到用 ps -ef|grep XXX 可是看到的不是全路径,怎么看全路径呢? 每个进程启动之后在 /proc下面有一个于pid对应的路径 例如:ps -ef|grep python 显示:oracle 4431 4366 0 18:56 pts/2 00:00:00 python Ser转载 2014-06-25 13:58:25 · 1814 阅读 · 0 评论 -
ftp服务器安装
1.安装vsftpd直接从源里面安装,代码:sudo apt-get install vsftpd 安装完毕后自动生成一个帐户"ftp",对应的home家目录是/srv/ftp。即在/srv下有个ftp文件存在。该账户暂时是封锁的,具体情况可以查看/etc/shadow中的第二个字段,该字段为*。可以直接给它设定密码,利用passwd指令。sudo passwd转载 2014-01-13 15:44:36 · 706 阅读 · 0 评论 -
linux下samba搭建和网络驱动器
samba 搭建1. 安装samba 服务 sudo apt-get install samba2. 修改samba.conf文件 Vi /etc/samba/smb.conf 在最下面添加如下的代码: [xxx] browseable = yes //浏览权限 writeable = yes //写权限转载 2012-10-25 22:55:04 · 1015 阅读 · 0 评论 -
线程池实例
在传统服务器结构中, 常是 有一个总的 监听线程监听有没有新的用户连接服务器, 每当有一个新的 用户进入, 服务器就开启一个新的线程用户处理这 个用户的数据包。这个线程只服务于这个用户 , 当 用户与服务器端关闭连接以后, 服务器端销毁这个线程。然而频繁地开辟与销毁线程极大地占用了系统的资源。而且在大量用户的情况下, 系统为了开辟和销毁线程将浪费大量的时间和资源。线程池提供了一个解决外部大量用户与转载 2013-10-29 14:17:22 · 829 阅读 · 0 评论 -
vim标签切换以及跳转头文件
f 新缓冲区打开 gf新标签页打开 或者直接f gf:tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab:tabc 关闭当前的tab:tabo 关闭所有其他的tab:tabs 查看所有打开的tab:tabp 前一个:tabn 后一个标准模式下:g原创 2013-09-15 14:21:42 · 5463 阅读 · 0 评论 -
getopt简介
函数getopt()用来分析命令行参数,其函数原型和相关变量声明如下: #include extern char *optarg; extern int optind, // 初始化值为1,下一次调用getopt时,从optind存储的位置重新开始检查选项,也就是从下一个'-'的选项开始。 extern int opterr, // 初始化值为1,当opterr=0时,geto转载 2013-08-07 11:21:59 · 761 阅读 · 0 评论 -
linux安装lua及错误解决
一、从Lua的官网(http://www.lua.org/)下载最新发布包,我下载的是lua-5.1.4.tar.gz发布包。 二、SecureCRT的rz命令上传lua-5.1.4到服务器上。使用tar -xzvf /lua-5.1.4.tar.gz命令解压缩,解压是一个lua-5.1.4文件夹。 三、使用cd /lua-5.1.4将当前工作目录,进入到lua-5原创 2013-07-26 19:11:02 · 2454 阅读 · 0 评论 -
fork复制后文件描述符映射关系
在C程序中,文件由文件指针或者文件描述符表示。ISO C的标准I/0库函数(fopen, fclose, fread, fwrite, fscanf,fprintf等)使用文件指针,UNIX的I/O函数(open, close, read, write, ioctl)使用文件描述符。下面重点来说下,文件描述符是如何工作的。文件描述符相当于一个逻辑句柄,而open,close等函数则是将文件转载 2012-10-18 17:40:12 · 2191 阅读 · 0 评论 -
进程的虚拟地址空间,堆栈、堆、数据段、代码段
上图是进程的虚拟地址空间示意图。堆栈段: 1. 为函数内部的局部变量提供存储空间。 2. 进行函数调用时,存储“过程活动记录”。 3. 用作暂时存储区。如计算一个很长的算术表达式时,可以将部分计算结果压入堆栈。数据段(静态存储区): 包括BSS段和数据段,BSS段存储未初始化的全局变量、静态变量。数据段存储经过初始化的全局和静态变量。转载 2012-10-17 11:11:17 · 758 阅读 · 0 评论 -
linux下用户权限设置
Linux下有三类用户:1.超级用户: root 具有操作系统的一切权限, UID为02.普通用户:具有操作系统有限的权限 UID为500—60003.伪用户: 是为了方便系统管理,满足相应的系统进程文件属主的要求,不能登录系统,UID为1--499 Linux通过 /etc/passwd进行用户管理,执行命令打开该文件: vi /etc/passwd在此转载 2012-10-29 13:27:30 · 729 阅读 · 0 评论 -
在linux下使用CMake构建应用程序
本文介绍了一个跨平台的自动化构建系统 CMake 在 linux 上的使用方法。 CMake 是一个比 automake 更加容易使用的工具,能够使程序员从复杂的编译连接过程中解脱出来。文中通过一些例子介绍使用 CMake 处理多源文件目录的方法、查找并使用其他开发包的方法以及生成 debug 版和 release 版程序的方法。CMake 简介 CMake 是一个跨平台的自动化转载 2012-10-29 13:26:28 · 487 阅读 · 0 评论 -
多线程多进程区别之一
按业务逻辑划分进程数,业务逻辑内由于数据耦合度高,使用多进程会导致频繁的IPC操作,另外进程的开销比线程开销要大很多,因此大多使用多线程。实际上,两者都是处理并发的手段什么是多线程: 多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。 使用线程的好处有以下几点: ·使用线程可以转载 2012-10-17 13:52:31 · 481 阅读 · 0 评论 -
unix读写原子操作
在多个函数操作时,由于不是原子操作,读写容易混乱,在Unix中提供了一种原子操作的方法:在打开文件的时候设置O_APPEND标识,这样内核每次进行读写之前都会将进程的偏移量设置到该文件的末尾处,于是每次读写之前不需要调用lseek()了。 具体参见pread AND pwrite 原子操作:指的是由多步组成的操作,如果该操作原子的执行,则要么执行完所有的操作转载 2012-10-18 11:42:23 · 1231 阅读 · 0 评论 -
pthread_cond_t须用pthread_mutex_t保护
为什么线程同步的时候pthread_cond_t要和pthread_mutex_t同时使用pthread_mutex_t count_lock;pthread_cond_t count_nonzero;unsigned count = 0;decrement_count () { pthread_mutex_lock (&count_lock); w转载 2012-10-17 18:13:32 · 662 阅读 · 0 评论 -
惊群现象
“据说”惊群问题已经是一个很古老的问题了,并且在大多数系统中已经得到有效解决,但对我来说,仍旧是一个比较新的概念,因此有必要记录一下。什么是惊群 举一个很简单的例子,当你往一群鸽子中间扔一块食物,虽然最终只有一个鸽子抢到食物,但所有鸽子都会被惊动来争夺,没有抢到食物的鸽子只好回去继续睡觉, 等待下一块食物到来。这样,每扔一块食物,都会惊动所有的鸽子,即为惊群。对于操作转载 2012-10-17 16:09:30 · 556 阅读 · 0 评论 -
多线程同步
线程同步(要素:排队,共享,变量,代码可同可不同) (非进程与共享) 我们可以在计算机上运行各种计算机软件程序。每一个运行的程序可能包括多个独立运行的线程(Thread)。线程(Thread)是一份独立运行的程序,有自己专用的运行栈。线程有可能和其他线程共享一些资源,比如,内存,文件,数据库等。当多个线程同时读写同一份共享资源的时候,可能会引起冲突。这时候,我们需要引入线程转载 2012-10-17 14:06:17 · 450 阅读 · 0 评论 -
linux time相关函数
日期时间篇asctimectimegettimeofdaygmtimelocaltimemktimesettimeofdaytimeasctime(将时间和日期以字符串格式表示) 相关函数 time,ctime,gmtime,localtime表头文件 #include定义函数 char * asctime(const struct tm * timep转载 2012-10-22 16:14:41 · 549 阅读 · 0 评论 -
ctags,cscope安装及使用 详细
目录解压源代码,安装ctags,cscope各个软件的版本Vim的简单配置在cscope界面中查询:Vim中调用cscope进行查询(地行模式以及快捷键模式),通过ctags实现查询(底行模式及快捷键)。 解压源代码,安装ctags,cscope透过命令:sudoapt-get install ctags cscope这个命令安装这两个工具软件。各个软件的版转载 2012-11-29 15:50:30 · 1196 阅读 · 0 评论 -
etcpasswd与etcshadow简介
Linux系统中账号管理最重要的两个文件就是:/etc/passwd和/etc/shadow。如果没有这两个文件,那么你是无论如何也不能登录Linux的。呃,也许有高手可以吧。呵呵。今天就参照鸟哥的书,以及自己刚折腾起来的UBUNTU系统来简单理解一下这两个文件,让我们一窥究竟,看看这里面到底是啥东西,了解其内部结构。sudo vi /etc/passwd看一下里面转载 2012-11-21 10:02:36 · 514 阅读 · 0 评论 -
Volatile 锁用于同步相关
锁的主要特性:互斥(mutual exclusion) 和可见性(visibility)。互斥,一次就只有一个线程能够使用该共享数据。线程通过持有某个特定的锁,实现互斥访问资源。可见性,确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的。Volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。Volatile 具有简易转载 2013-08-02 12:34:09 · 1857 阅读 · 0 评论 -
共享内存
注意:使用特殊文件提供匿名内存映射:适用于具有亲缘关系的进程之间; 由于父子进程特殊的亲缘关系,在父进程中先调用mmap(),然后调用fork()。那么在调用fork()之后,子进程继承父进程匿名映射后的地址空间,同样也继承mmap()返回的地址,这样,父子进程就可以通过映射区域进行通信了。注意,这里不是一般的继承关系。一般来说,子进程单独维护从父进程继承下来的一些变量。而mmap()返回的地址,转载 2013-08-01 18:47:57 · 593 阅读 · 0 评论 -
fork之前之后文件描述符共享
在C程序中,文件由文件指针或者文件描述符表示。ISO C的标准I/0库函数(fopen, fclose, fread, fwrite, fscanf, fprintf等)使用文件指针,UNIX的I/O函数(open, close, read, write, ioctl)使用文件描述符。下面重点来说下,文件描述符是如何工作的。文件描述符相当于一个逻辑句柄,而open,close等函数则是将文转载 2013-08-01 15:36:37 · 3790 阅读 · 0 评论 -
glib库hash表GHashTable
hash表是一种提供key-value访问的数据结构,通过指定的key值可以快速的访问到与它相关联的value值。hash表的一种典型用法就是字典,通过单词的首字母能够快速的找到单词。关于hash表的详细介绍请查阅数据结构的相关书籍,我这里只介绍glib库中hash表的基本用法。要使用一个hash表首先必须创建它,glib库里有两个函数可以用于创建hash表,分别是g_hash_table_n转载 2013-07-30 22:24:04 · 968 阅读 · 0 评论