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) |