DAY 26

一、进程的退出状态

  1. exit()
    • 功能:让进程退出并刷新缓冲区。
    • 参数:status表示进程退出的状态。
    • 返回值:缺省。
    • EXIT_SUCCESS表示正常退出,EXIT_FAILURE表示异常退出。
    • exit会调用atexit注册的退出函数,而_exit不会。
  2. _exit
    • 功能:让进程退出,不刷新缓冲区。
    • 参数:status表示进程退出状态。
    • 返回值:缺省。

二、进程空间的回收

  1. wait
    • 功能:阻塞等待任意子进程退出,并回收该进程的状态,一般用于父进程回收子进程状态。
    • 参数:status表示子进程退出时的状态,如果不关心退出状态可用NULL,如果要回收进程退出状态,则用WEXITSTATUS回收。
    • 返回值:成功回收的子进程PID,失败返回-1。

 

三、僵尸进程和孤儿进程

  1. 孤儿进程:子进程还在,但父进程已经结束,此时由init进程收养子进程,避免子进程无人收尸。
  2. 僵尸进程:父进程还在,子进程先结束,但父进程没有做收尸操作,子进程进入僵尸态。

 

四、exec 函数族

在 Linux 中,exec 函数族用于在一个进程中执行另一个程序。当进程调用 exec 函数时,该进程的用户空间代码和数据将被新程序替换,从新程序的启动例程开始执行。调用 exec 并不创建新进程,所以调用 exec 前后该进程的 ID 并未改变。

exec 函数族包括以下几种函数:

  1. execlint execl(const char *path, const char *arg,...),以逐个列举参数的方式执行文件。
  2. execvint execv(const char *path, char *const argv[]),以指针数组的方式传递参数执行文件。
  3. execlpint execlp(const char *file, const char *arg,...),根据系统环境变量 PATH 搜索可执行文件并执行。
  4. execvpint execvp(const char *file, char *const argv[]),与 execlp 类似,但以指针数组的方式传递参数。
  5. execleint execle(const char *path, const char *arg,..., char * const envp[]),可以传递环境变量。
  6. execvpeint execvpe(const char *file, char *const argv[], char *const envp[]),与 execle 类似,但根据文件搜索方式不同。

这些函数的区别如下:

  1. 参数传递方式
    • 带 l 的函数(如 execl)以逐个列举参数的方式传递参数,最后以 NULL 结尾。
    • 带 v 的函数(如 execv)以指针数组的方式组织参数。
  2. 文件搜索方式
    • 带 p 的函数(如 execlp 和 execvp)只在系统环境变量 PATH 中搜索可执行文件。
    • 其他函数(如 execlexecvexecle 和 execvpe)需要提供完整的文件路径。
  3. 环境变量传递:带 e 的函数(如 execle 和 execvpe)可以传递环境变量,其他函数使用父进程继承的环境变量。

需要注意的是,exec 函数只有在调用出错时才会返回 -1,成功执行新程序后不会返回。此外,在使用 exec 函数时,需要确保提供的文件路径或文件名正确,以及参数和环境变量的设置符合要求。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值