摘要:关于代码的可重入性,设计开发人员一般只考虑到线程安全,异步信号处理函数的安全却往往被忽略。本文首先介绍如何编写安全的异步信号处理函数;然后举例说明在多线程应用中如何构建模型让异步信号在指定的线程中以同步的方式处理。应用中编写安全的信号处理函数 在开发多线程应用时,开发人员一般都会考虑线程安全,...
阅读全文
12 2014 档案
摘要:NAME syscall - 间接系统调用 SYNOPSIS #define _GNU_SOURCE #include <unistd.h> #include <sys/syscall.h> /* For SYS_xxx definitions */ int syscall(int number,
阅读全文
摘要:线程分类线程按照其调度者可以分为用户级线程和核心级线程两种。1.户级线程 用户级线程主要解决的是上下文切换的问题,它的调度算法和调度过程全部由用户自行选择决定,在运行时不需要特定的内核支持。在这里,操作系统往往会提供一个用户空间的线程库,该线程库提供了线程的创建、调度、撤销等功能,而内核仍然...
阅读全文
摘要:在Linux的多线程中使用信号机制,与在进程中使用信号机制有着根本的区别,可以说是完全不同。在进程环境中,对信号的处理是,先注册信号处理函数,当信号异步发生时,调用处理函数来处理信号。它完全是异步的(我们完全不知到信号会在进程的那个执行点到来!)。然而信号处理函数的实现,有着许多的限制;比如有一...
阅读全文
摘要:ps:将某个时间点的程序运作情况撷取下来常用格式:ps -o pid,ppid,pgid,sid,commps -ups -l[root@linux~]# ps aux[root@linux~]# ps -lA[root@linux~]# ps axjf参数:-A:所有的 process 均显示出来...
阅读全文
摘要:1.终端登录登录过程:内核--->init[进程ID=1]--->(fork)init--->(exec)getty--->(exec)--->login登录结束过程:进程1=init->登录shell终端设备驱动程序使用终端的用户2.网络登录如下图3.进程组1).每个进程属于一个进程组,这个进程组...
阅读全文
摘要:控制命令如ctrl+c,ctrl+d等命令是会kill到前台进程组的,这个过程和bash进程还有tty驱动有关系。在终端执行命令,在bash进程看来都是在执行job,然后fork出子进程来执行这些job,引用一下http://blog.csdn.net/ruglcc/article/details/...
阅读全文
摘要:终端,英文叫做terminal ,通常简称为term ,比如我们在X下的xterm. 控制台,英文叫做console。 要明白这两者的关系,还得从以前的多人使用的计算机开始。 大家都知道,最初的计算机由于价格昂贵,因此,一台计算机一般是由多个人同时使用的。在这种情况下一台计算机需要连接上许多套...
阅读全文
摘要:execl函数功能如下:启动一个可执行文件,并且对他进行传送参数。一些原型如下#include externchar**environ; intexecl(constchar*path,constchar*arg,...); intexeclp(constchar*file,constchar*ar...
阅读全文
摘要:From:http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393.html花了很长时间整理的,感觉用起来很方便,共享一下。我的vim配置主要有以下优点:1.按F5可以直接编译并执行C、C++、java代码以及执行shell脚本,按“F8”可进...
阅读全文
摘要:在前面《UNIX环境高级编程 文件描述符浅析》一文中所讲的I/O函数都是针对文件描述符。而对于标准I/O库,它们的操作都是围绕流来进行的。当用标准I/O库打开或创建一个文件时,我们已经使一个流与文件相结合。 一、流和FILE对象 当打开一个流时,标准I/O函数fopen返回一个指向FILE对象的指针
阅读全文
摘要:<Uinx 环境高级编程笔记> 以前经常遇到两种I/O操作 一类是f打头的fopen, fread, fwrite 一类是没有f打头的open, read, fwrite 原来一个是UNIX I/O(在类Unix系统上实现),另一类是标准I/O(在很多系统上都有实现,包括windows) 使用标准I
阅读全文
摘要:du:查询文件或文件夹的磁盘使用空间 如果当前目录下文件和文件夹很多,使用不带参数du的命令,可以循环列出所有文件和文件夹所使用的空间。这对查看究竟是那个地方过大是不利的,所以得指定深入目录的层数,参数:--max-depth=,这是个极为有用的参数!如下,注意使用“*”,可以得到文件的使用空间大小...
阅读全文
摘要:一般我们讲,都说进程有文件描述符表,文件描述符表中的指针指向某个inode,这中间省略了file,dentry对象,对准确理解VFS结构无益,本文结合网络所查,并根据APUE8.3和LKD13.11章节校对,总结在下,希望有用。 内核中,对应于每个进程都有一个文件描述符表,表示这个进程打开的所...
阅读全文
摘要:一旦使用GDB挂上被调试程序,当程序运行起来后,你可以根据自己的调试思路来动态地在GDB中更改当前被调试程序的运行线路或是其变量的值,这个强大的功能能够让你更好的调试你的程序,比如,你可以在程序的一次运行中走遍程序的所有分支。一、修改变量值 修改被调试程序运行时的变量值,在GDB中很容易实现,使用G...
阅读全文
摘要:查看栈信息当程序被停住了,首先要确认的就是程序是在哪儿被断住的。这个一般是通过查看调用栈信息来看的。在gdb中,查看调用栈的命令是backtrace,可以简写为bt。(gdb) bt#0 pop () at stack.c:10#1 0x080484a6 in main () at main.c:1...
阅读全文
摘要:在使用GDB调试程序时,触发断点后,可以使用print命令(简写为p),或是同义命令inspect来查看当前程序的运行数据。print命令的格式是: print print / 是表达式,是所调试程序的语言的表达式(GDB可以调试多种编程语言);是输出的格式,例如如果要把表达式按16进制的格式输出...
阅读全文
摘要:简介strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执...
阅读全文
摘要:昨天晚上小试了一下SSH,学到了一些乱七八糟的命令,知道了一种古老装逼的聊天方式:write。期间下定决心终于弄明白了pts/0之类的东西到底是什么东西。先说pts/0吧,man里面是这样说的:ptmx and pts - pseudo-terminal master and slave,pts是所...
阅读全文
摘要:1、什么是命令行接口用户使用计算机有两种常见的方式,一种是图形化的接口(GUI),另外一种则是命令行接口(CLI)。对于图形化的接口,用户点击某个图标就可启动后 台的某个程序;对于命令行的接口,用户键入某个程序的名字就可启动某个程序。这两者的基本过程是类似的,都需要查找程序文件在磁盘上的位置,加载到...
阅读全文
摘要:当init启动后,它通过执行各种启动事务来继续引导进程(检查并监视文件系统,启动后台程序daemons,等等),直至完成用户所有操作环境的设置工作。这里主要涉及4个程序:init、getty(agetty)、login和shell程序。这4个程序之间的关系见下图所示。init进程的主要任务是根据/e...
阅读全文
摘要:shell 查看会话、进程组ps -o pid,ppid,pgid,sid,comm进程调用setpgid(setsid也可以)可以参加一个现存的组或者创建一个新进程组。可以是前台进程组或后台进程组。#include #include int setpgid(pid_t pid, pid_t pgi...
阅读全文
摘要:1、 进程组 组长不能创建新的 会话。 其它进程可以创建新的会话,创建后既成为会话首领,同时失去控制终端。2、 会话首领可以重新打开控制终端1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #incl...
阅读全文
摘要:Linux进程控制 程序是一组可执行的静态指令集,而进程(process)是一个执行中的程序实例。利用分时技术,在Linux操作系统上同时可以运行多个进程。分时技术的基本原理是把CPU的运行时间划分成一个个规定长度的时间片,让每个进程在一个时间片内运行。当进程的时间片用完时系统就利用调度程序切换到另
阅读全文