Chinaunix首页 | 论坛 | 博客
  • 博客访问: 174196
  • 博文数量: 35
  • 博客积分: 287
  • 博客等级: 二等列兵
  • 技术积分: 353
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-02 21:01
个人简介

君子务本,本立则道生。

文章分类
文章存档

2014年(4)

2013年(12)

2012年(19)

分类: LINUX

2013-12-10 10:33:21

1、如果一个进程fork一个子进程,但不要等待子进程终止,也不希望子进程处于僵死状态,直到父进程终止,实现这一技巧是fork两次(子进程fork一次,然后exit)


2、fork和vfork之间的区别

vfork用于创建一个新进程,而该新进程的目的是exec一个新程序;


vfork和fork一样都创建一个子进程,当时它不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec(或exit),于是也就不会访问该地址空间。 相反,在子进程exec或exit前,它在父进程的空间中运行。


3、exec


当进程调用一种exec的时,该进程的执行完全替换为新程序,而新程序则从其main函数开始执行,因为调用exec并不创建新进程,所以前后的秦城ID并没有改变。 exec只是用一个全新的程序替换了当前进程的正文、数据、堆和栈。



4、atexit函数


#include


int atexit( void (*func)(void) );


登记的进程将有exit自动调用,调用顺序FILO.


5、setjump 和 longjmp函数


非局部goto,这不是由普通C语言goto语句在一个函数体内实施的跳转,而是在栈上跳过若干调用帧,返回到当前函数调用路径上的某一个函数中。


#include


int setjmp(jmp_buf env);


int longjmp(jmp_buf env, int val);


6、字符串宏创建符 #


#define doit(name)   pr_limit( #name, name);
阅读(1351) | 评论(0) | 转发(0) |
0

上一篇:Buffer Overflow

下一篇:APUE 学习(二) 信号

给主人留下些什么吧!~~