fork前后:
例如:文件的拷贝,父进程拷贝前一半,子进程拷贝后一半。
一、两种应用场景
1、多任务时,子进程与父进程差不多。
2、父进程创建出子进程后,子进程做的事情与父进程完全不同。
例如:fork()的父进程为bash时。
3、exec函数族
用新的镜像替换旧的镜像(所有进程实体),启动一个新的程序。
(1)execl
int execl(const char *path(可执行文件路径),const char *arg(可执行文件名),...(可变参数))
execv
int execv(const char *path,char *const argv[ ])
(2)execlp
int execlp(const char *file(从系统环境变量中去找,bin/),const char *arg ,...)
execvp
int execvp(const char *file,char *const argv[ ])
(3)execle
int execle(const char *path ,const char *arg ,...)
可传递环境变量。
(4) execvpe
int execvpe(const char *file,char *const argv[ ] ,char *const envp[ ])
(5)atexit(回调函数)
int atexit(void(*function)(void)函数指针)
当程序结束前都会执行atexit函数;若_exit结束,则不执行,程序会立即结束。
二、进程的终止
1、正常终止
(1)main中return
(2)exit() //库函数
void exit(int status)
刷新缓冲区。
(3)_exit
void _exit(int status)
不会刷新缓冲区,立即结束。
2、异常终止
(1)abort( )
(2)signal
发送信号,例如kill pid。