(linux 中关于信号的资源)![http://www.thegeekstuff.com/2012/03/linux-signals-fundamentals/]
资源(http://www.linuxprogrammingblog.com/all-about-linux-signals?page=3)
信号就是一个软中断(software interrupts)。 一个健壮的程序必须需要处理信号,信号是向应用程序传递异步事件的方式。
一个用户按下ctrl+c 就是向另一个程序发送信号
用户通过Crtl-C、Crtl-\等键或者通过驱动终端程序来请求内核产生信号。
当进程执行出错时,内核给进程发送一个信号,比如,非法存取段、浮点数溢出、 或者一个非法的机器指令。内核也利用信号通知进程特事件的发生。
一个进程可以通过系统调用kill给另一个进程发送信号。一个进程可以可以和另一个 进程通过信号通信。
由进程的某个操作产生的信号被称为同步信号,例如,被零除;像用户击键这样的进程外 的事件引起的信号称之为异步信号。
使用以下调用来恢复默认处理
signal(SIGINT, SIG_DFL);
这是这类信号处理行为的最普遍的,有SIGTERM、SIGQUIT、SIGPIPE、SIGUSR1、SIGUSR2
有SIGSEGV、SIGILL、SIGABRT这个信号。
比如这个SIGCHLD
SIGSTOP使进程悬停(suspend)然后使用SIGCOND继续(shell中的ctrl-z)
程序可以通过以下调用来告诉内核,它需要忽略SIGINT的信号
signal(SIGINT, SIG_IGN);
如果产生像除以0的致命错误、SIGKILL和SIGSTOP不能被忽略。
后两个信号供root用户拥有杀死任何进程的权利。
程序在接收到SIGINT后,调用一个恢复设置的函数
signal(SIGALRM, handler);
补充一下最后一点,捕捉信号的函数应该是可重入的。在解释这个原因前,让我们首先了解下什么是可重入。一个可重入的函数是一个函数在执行的过程的可以因为某些原因被停止下来(比如中断或者信号),在完成了某项任务后可以返回继续执行原来的程序。原因很简单,当一个程序正在执行的时候,信号发生(捕捉另一个信号),进程转而执行其他的程序,如果这个时候正好宿主程序的全局变量和被呼叫的程序的变量同名的话,那么,当子进程执行完毕后返回宿主进程中,会产生意想不到的结果
可靠信号就是实时信号
非可靠信号就是非实时信号,凡位于[SIGRTMIN, SIGRTMAX]区间的都是可靠信号.
非可靠信号一般都有明确的用途和含义,可靠信号则可以让用户自己定义使用.
#include<signal.h>
void (*signal(int signum, void (*handler))(int))(int);
套接字(socket)是一种为计算机网络通信编程的接口,首次出现在美国加州Berkeley大学开发的BSD版本的系统中.有了套接字(应用层),从而允许我们进行服务器/客户端的开发,不必关心底层的细节.详细的关于内核网络协议的实现,我会在以后详细阐述,现在,这篇文章
#include<sys/types.h>
#include<sys/socket.h>
int socket(int domain,int type, int protocol)` domain`: 代表套接字地址族,常用的有AF_INET,PF_INET(IPv4),AF_INET6(IPv6), AF_IPX(Novell 网络协议)…
type: 最常用的是SOCK_STREAM和SOCK_DGRAM,分别表示流式套接字和数据包套接字.
protocol: 一般情况下会设置为0,表示由系统在当前的domain下选择合适的协议.
TODO
#1
首先是APUE,patch和little,加油
#2
在本网站的首页为什么会遇到这样的问题呢,多显示了三个日期,然而,本地测试一点问题没有的
这个用于给出内核启动的命令行,它和用于进程的cmdline项非常像
yubo@debian:/proc$ cat cmdline BOOT_IMAGE=/vmlinuz-3.2.0-4-686-pae root=UUID=84caed03-f243-4a09-afa5-15be502cbfb9 ro quiet yubo@debian:/proc$
这个文件提供了有关系统cpu的多种信息,格式为:文件由多行构成,每行包括一个域名称,一个冒号和一个值
# 在主目录下写成一个名为 .my.cnf的文件,将下面的内容填入其中
[mysql]
user=user
password=pass
[mysqladmin]
user=user
password=pass
在github上每次push要求输入密码和用户名着实烦恼,那么,怎么样可以不用这样呢
以前我好像是用的ssh的方法,需要密钥,现在明白了github的网站推荐使用https,
所以,暂时以https为主,其他的以后慢慢琢磨.可以在_本地主目录_新建.netrc输入以
下内容:
machine github.com
login <user>
password <password>
真不容易,搞了很久才搞定。首先,你先设定HOME的环境变量,最好全局的,然后把
_netrc文件放到你设定的HOME文件夹里,然后再克隆下来就方便了。
这个先不讨论了。
所有的git使用的话必须首先fetch origin,再开发,否则很容易产生冲突
git config –global core.editor vim
因为有些时候新安装的git默认使用的系统语言,导致不方便,所以,有必要修改默认
编辑系统配置文件 .profile
的语言。
alias git='LANG=en_US git'
并source .profile一下就可以了。
如果让git能够自己补全命令的话,效率非常的高
方法是将git源代码目录中git/contrib/completion/git-completion.bash这个文件放到用户主目录下。然后使用source .git-completion.bash即可。
我把配置文件放在了github