DAY24

fork之前open,子进程会继承父进程已打开的文件的相关信息,所以此时父子进程会影响同一个offset值。

fork之后open

父子进程各自有各自的打开文件信息,相互之间不影响。

进程创建好后的两种典型情况:

1,多任务:子进程做的和父进程差不多//子承父业

2,父进程创建出子进程后,子进程和父进程完全不同//自力更生

例如 shell程序---bash

exec函数族----作用:启动(运行)一个新程序

#include <unistd.h>
int execl(const char *path, const char *arg, ...);
int execv(const char *path, char *const argv[]);

key=value
int execle(const char *path, const char *arg, ..., char *const envp[]);
int execle(const char *path, const char *arg, ..., char *const envp[]);

int execve(const char*path,char*const argv[],char*const evnp[]);
int execlp(const char *file, const char *arg, ...);

这些函数的区别
    1),前4个使用路径名作为参数,后面两个使用文件名做参数
    当filename中,含有/时视为路径名,否则就按PATH变量,在指定目录下查找可执行文件。
    2)相关的参数表传递
    l表示list,v表示vector
    execl,execlp,execle,需要将参数一个一个列出,并以NULL结尾。
    execv,execvp,execve,需要构造一个参数指针数组,然后将数组的地址传入。

    3)以e结尾的函数,可以传入一个指向环境字符串的指针数组的指针。其他未指定环境变量,使用父进程继承过来的。
execve 是真正的系统调用
这些函数如果调用成功则加载新的程序从启动代码开始执行,不再返回,如果调用出错
则返回-1,所以exec函数只有出错的返回值而没有成功的返回值。
 

进程的结束:

1.exit     库函数
    退出状态,终止的进程会通知父进程,自己使如何终止的。    
    如果是正常结束(终止),则由exit传入的参数。
    如果是异常终止,则有内核通知异常终止原因的状态。
    任何情况下,父进程都能使用wait,waitpid获得这个状态,以及资源的回收。
    
    
    void exit(int status) 
    exit(1);
    功能:
        让进程退出,并刷新缓存区
    参数:
        status:进程退出的状态
    返回值:
        缺省
    
    EXIT_SUCCESS    0
    EXIT_FAILURE    1

    return  当该关键字出现在main函数中时候可以结束进程
            如果在其他函数中则表示结束该函数。
    
    
    exit -> 刷新缓存区 -> atexit注册的退出函数 -> _exit
    
    2._exit    系统调用
    void _exit(int status);
    功能:
        让进程退出,不刷新缓存区
    参数:
        status:进程退出状态
    返回值:
        缺省

    
             mian(int agc,argv)
{
    main();
}             
    
    回调函数
    3.atexit
    int atexit(void (*function)(void));
    功能:
        注册进程退出前执行的函数
    参数:
        function:函数指针
            指向void返回值void参数的函数指针
    返回值:
        成功返回0
        失败返回非0

    当程序调用exit或者由main函数执行return时,所有用atexit
    注册的退出函数,将会由注册时顺序倒序被调用

注意:
   a. 是exit函数调用时,会调atexit函数 
      _exit函数调用时,不会调到atexit
   b. atexit 程序正常结束
      (1).main 返回 //exit 
      (2).exit()        
   c.atexit函数 可以多次注册 
   d.最后"退出清理函数"的调用顺序,与注册顺序相反。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值