进程创建之后的运行学习

  1. Exec(函数族):启动一个新的程序

将当前的镜像替换为新的镜像;

相关的exec函数

  1. 在进程创建成功后,会有两种情况:

(1)多任务,父子进程做的事相同,名称相同;

(2)父子进程做的事不同,名称也不同,如:shell系统——bash,在这里调用了exec函数族,作用是启动(运行)了一个新的程序,本质是在函数调用后用新的镜像程序替代当下的程序。

3.exec函数的种类

int execl(const char *path, const char *arg, ...) —— execl(“路径”,“程序名”,“参数”,NULL);

int execv(const char *path,char *const argv[ ]) —— execv(“路径”,arg);

在这里将“程序名”,“参数”,NULL放进arg[ ]内,然后放到函数中;

execlp和execvp,“p”表示环境变量path,不需要在函数传参时写路径;

execle和execvpe,“e”表示环境变量environ,可以调用extern char **environ作环境变量,在传参的最后要加环境变量environ;

4.exit     库函数

    退出状态,终止的进程会通知父进程,自己使如何终止的。   

    如果是正常结束(终止),则由exit传入的参数。

    如果是异常终止,则有内核通知异常终止原因的状态。

    任何情况下,父进程都能使用wait,waitpid获得这个状态,以及资源的回收。

    void exit(int status)

    exit(1);

    功能:让进程退出,并刷新缓存区

    参数:status:进程退出的状态

    return  当该关键字出现在main函数中时候可以结束进程,如果在其他函数中则表示结束该函数。

    exit -> 刷新缓存区 -> atexit注册的退出函数 -> _exit

  5._exit    系统调用

    void _exit(int status);

    功能:让进程退出,不刷新缓存区

    参数:status:进程退出状态

    6.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.最后"退出清理函数"的调用顺序,与注册顺序相反。

7.进程空间的回收

    exit(20);----void exit(int status);

wait/waitpid

    exit(EXIT_SUCCESS);// EXIT_SUCCESS ---退出状态值

    pid_t wait(int *status);//wait 来获取到

功能:该函数可以阻塞等待任意子进程退出

      并回收该进程的状态。

      一般用于父进程回收子进程状态。

参数:status 进程退出时候的状态

      如果不关心其退出状态一般用NULL表示

      如果要回收进程退出状态,则用WEXITSTATUS回收。

返回值:成功 回收的子进程pid

        失败 -1;

(1)wait

原型:pid_t wait(int *status);

参数:status 是一个指向整数的指针,用于存储子进程的退出状态。

返回值:成功时返回终止的子进程的 PID;失败时返回 -1,并设置 errno。

fork之后父进程与子进程文件打开的方式与共享

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值