Linux 新增系统调用的启示
最近在研究 Linux 内核的时间子系统,为下一篇长文《服务器程序中的日期与时间》做准备,无意中注意到了 Linux 新增的几个系统调用的对编写服务器代码的影响,先大致记录在这里。这篇博客也可算作前一篇《多线程服务器的常用编程模型》的一个注脚。 1. 服务器程序的风格可能在变 新的创建文件描述符的 syscall 一般都支持额外的 flags 参数,可以直接指定 O_NONBLOCK 和 FD_CLOEXEC,例如: accept4 – 2.6.28 eventfd2 – 2.6.27 inotify_init1 – 2.6.27 pipe2 – 2.6.27 signalfd4 – 2.6.27 timerfd_create 2.6.25 以上 6 个 syscalls,除了最后一个是新功能,其余的都是增强原有的调用,把数字尾号去掉就是原来的 syscall。 O_NONBLOCK 的功能是开启“非阻塞IO”,而文件描述符默认是阻塞的。 这些创建文件描述符的系统调用能直接设定 O_NONBLOCK 选项,或许能反映当前 Linux (服务端)开发的风向,那就是我在前一篇博客《多线程服务器的常用编程模型》里推荐的 one loop per thread + (non-blocking IO with IO multiplexing)。从这些内核改动来看,non-blocking IO 已经主流到让内核增加 syscall 以节省一次 fcntl(2) 调用的程度了。 另外,以下新系统调用可以在创建文件描述符时开启 FD_CLOEXEC 选项: dup3 – 2.6.27 epoll_create1 – 2.6.27 FD_CLOEXEC 的功能是让程序 fork() 时,子进程会自动关闭这个文件描述符(见下面的更正)。而文件描述默认是被子进程继承的(这是传统 Unix 的一种典型 IPC,比如用 pipe(2) 在父子进程间单向通信)。 以上 8 个新 syscalls 都允许直接指定 FD_CLOEXEC,或许说明 fork() 的主要目的已经不再是创建 worker process 并通过共享的文件描述符和父进程保持通信,而是像 Windows 的 CreateProcess 那样创建“干净”的进程,其与父进程没有多少瓜葛。 以上两个 flags 在我看来,说明 Linux 服务器开发的主流模型正在由 fork() + worker processes 模型转变为我前文推荐的多线程模型。fork() 的使用频度会大大降低,将来或许只有专门负责启动别的进程的“看门狗程序”才会调用 fork(),而一般的服务器程序(此处“服务器程序”的定义见我前一篇文章)不会再 fork() 出子进程了。原因之一是,fork() 一般不能在多线程程序中调用,因为 Linux 的 fork() 只克隆当前线程的 thread of control,不克隆其他线程。也就是说不能
相关文档:
转自:http://blog.csdn.net/dog250/archive/2010/02/09/5303687.aspx
首先,这个rootkit其实是一个内核木马,和大多数木马不同的是,恶意木马所在的机器是客户端而不是服务器,而黑客所在的机器是服务器,这样做的好处在于可以躲避防火墙,一般的防火墙对外出的包审查不是那么严格而对进入的包审查严格,如果恶意程序是服 ......
至此落笔之际,恰至Linux问世18周年,18年的成长,如梦似幻,风雨颇多,感慨颇多。
犹自忆起多年以前一位前辈训导时的箴言:今天的必然正是由之前一系列的偶然所决定的。过去的某年某月,我偶然初识Linux就身陷其中,至今仍找不到出去的路,而正是这次乃至之后的多次偶然相联合,从而决定了今日的我要在此写下这些话。那么 ......
假如上传代码到SVN上,最简单的一种方法就是:进入代码目录,然后$svn import -m "New import" myqwcode http://192.168.0.222/svn/myqwcode就可以了,不需要建立新目录!
1、将文件checkout到本地目录
svn checkout path(path是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain
  ......
热心点评:硬盘安装fedora的规则就像我们非常亚克西的政策一样, 告诉你不能发送yellow短信, 但就是不告诉你yellow的尺度是什么, 你只能冒着手机停机的危险,测试下哪些短信究竟射黄了。 通过不下两位数的重启, 摸索了一点点规则。 OK, 我想Linux不是gov, 安装还是有规则可言的,只是我们还没有找到这个readme? 达 ......
I learned some experience while Nanjing found 0x03 error. At begining, we don't know why our GSRM(a linux process) hang in a short time 5 seconds sometimes. It didn't handle any message at that time and the interruption is not regularly. So we assume we have Linux OS problem. We did following checks ......