进程的回收和exec函数族

1进程的回收:wait()和waitpid()函数。

        pid_t wait(int *status):

                1.功能:该函数可以阻塞等待任何子进程退出,并回收该进程的状态信息。一般用于父进程回收子进程。

                2.参数:status表示进程退出时的状态。若参数为NULL,则代表不关心子进程的状态信息,此时函数只用于阻塞等待回收子进程。

                3.返回值:若成功,则返回子进程的pid号,若失败,则返回-1

        用于判断status的几个常用宏函数:

        1.WIFEXITED(status)  是不是正常结束

        2.WEXITSTATUS(status) 使用这个宏去拿返回值

        3.WIFSIGNALED(status) 是不是收到了信号而终止的

        4.WTERMSIG(status)如果是信号终止的,那么是几号信号。

        注意:1和2,3和4是搭配使用的。

pid_t waitpid(pid,&status,options):

        功能:用于回收子进程的资源,并获得子进程的结束信息。

        参数:pid 表示要回收的进程号;status用于保存子进程的结束信息;options可选:0/WNOHANG. 若为0,则表示阻塞等待回收子进程的状态信息。若为WNOHANG,则表示非阻塞等待回收子进程的结束状态信息。非阻塞的意思是如果子进程没有结束,父进程不会一致阻塞在这里等待,而是继续执行它的指令。当子进程结束后,才会获得子进程的结束信息。

        返回值:若指令执行成功并且子进程被回收,则为回收的子进程的pid;若指令执行成功但是子进程未被回收,则返回值未0;若执行失败,则未-1;

exec函数族:功能就是调用可执行文件替换当前执行程序的代码区和数据区。使得程序执行这个可执行文件。

        int execl(const char *path, const char *arg, ...);
        int execv(const char *path, char *const argv[]);
        int execvp(const char *file, char *const arg[])            int execlp(const char *file, const char *arg, ...);

        注意:1.必须是可执行文件。

                   2.execl和execv函数都会扫描当前路径。而另外两个不会,若在另外两个函数中只写当前路径下的文件名,函数会执行失败,因为若是文件的话,它默认会在PAHT 中去寻找此文件。

                   3.若想每次都执行成功,最好每个函数中都写路径加文件名。比如:在当前路径下有一个可执行文件,只需要写 “./filename”.则上面四个函数都能成功执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值