linux中wait与waitpid函数使用场景及扩展

简介: linux中wait与waitpid函数使用场景及扩展

一般运用这两个函数,是在父进程等待子进程退出的过程中

区别:wait使调用者阻塞,waitpid有一个选项,可以使调用者不阻塞

status参数是一个整型数指针

非空:子进程退出状态放在它所指向的地址中。

空:不关心退出状态

那么父进程为啥要等待子进程退出?因为子进程退出状态不被收集,就会变成僵尸进程,Linux中用z+显示(英文单词zombie)

wait函数:使调用者阻塞,用来等待子进程退出(后面有附加代码验证)

编译结果:

waitpid函数:可以使调用者不阻塞,则父进程子进程一起运行(后面有附加代码验证)

编译结果:

附加代码验证(wait):

#include <stdio.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
 
 
int main()
{
    pid_t pid;
 
    int cnt = 0;
    int status = 10;
 
    
    pid = fork();
        
    if(pid > 0)
    {
 
        wait(&status);
        printf("child quit, child status = %d\n",WEXITSTATUS(status));
        while(1){
            printf("cnt=%d\n",cnt);
            printf("this is father print, pid = %d\n",getpid());
            sleep(1);
        }    
    }
    
    else if(pid == 0){
        
        while(1){
            printf("this is chilid print, pid = %d\n",getpid());
            sleep(1);
            cnt++;
            if(cnt == 5){
                exit(3);
            }
        }    
    }
 
    return 0;
}

附加代码验证(waitpid):

#include <stdio.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
 
 
int main()
{
    pid_t pid;
 
    int cnt = 0;
    int status = 10;
 
    
    pid = fork();
        
    if(pid > 0)
    {
 
        wait(&status);
        printf("child quit, child status = %d\n",WEXITSTATUS(status));
        while(1){
            printf("cnt=%d\n",cnt);
            printf("this is father print, pid = %d\n",getpid());
            sleep(1);
        }    
    }
    
    else if(pid == 0){
        
        while(1){
            printf("this is chilid print, pid = %d\n",getpid());
            sleep(1);
            cnt++;
            if(cnt == 5){
                exit(3);
            }
        }    
    }
 
    return 0;
}
相关文章
|
2月前
|
安全 Linux 虚拟化
|
18天前
|
Linux
【Linux】System V信号量详解以及semget()、semctl()和semop()函数讲解
System V信号量的概念及其在Linux中的使用,包括 `semget()`、`semctl()`和 `semop()`函数的具体使用方法。通过实际代码示例,演示了如何创建、初始化和使用信号量进行进程间同步。掌握这些知识,可以有效解决多进程编程中的同步问题,提高程序的可靠性和稳定性。
66 19
|
20天前
|
Linux Android开发 开发者
linux m、mm、mmm函数和make的区别
通过理解和合理使用这些命令,可以更高效地进行项目构建和管理,特别是在复杂的 Android 开发环境中。
55 18
|
28天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
96 13
|
4月前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
194 6
|
4月前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
203 3
|
5月前
|
Linux
Linux0.11 文件打开open函数(五)
Linux0.11 文件打开open函数(五)
61 0
|
8月前
|
Linux 开发者
Linux文件编程(open read write close函数)
通过这些函数,开发者可以在Linux环境下进行文件的读取、写入和管理。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
182 4
|
8月前
|
存储 Linux
Linux文件编程(open read write close函数)
Linux文件编程(open read write close函数)
274 0
|
Linux
Linux系统调用二、open()函数与close()函数介绍
Linux系统调用二、open()函数与close()函数介绍
394 0
Linux系统调用二、open()函数与close()函数介绍