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;
}
相关文章
|
18天前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
19 6
|
19天前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
59 3
|
1月前
|
Linux
在Linux内核中根据函数指针输出函数名称
在Linux内核中根据函数指针输出函数名称
|
2月前
|
Linux PHP
Linux CentOS 宝塔 Suhosin禁用php5.6版本eval函数详细图文教程
【8月更文挑战第27天】本文介绍两种禁用PHP执行的方法:使用`PHP_diseval_extension`禁用和通过`suhosin`禁用。由于`suhosin`不支持PHP8,仅适用于PHP7及以下版本,若服务器安装了PHP5.6,则需对应安装`suhosin-0.9.38`版本。文章提供了详细的安装步骤,并强调了宝塔环境下与普通环境下的PHP路径差异。安装完成后,在`php.ini`中添加`suhosin.so`扩展并设置`executor.disable_eval = on`以禁用执行功能。最后通过测试代码验证是否成功禁用,并重启`php-fpm`服务生效。
27 2
|
2月前
|
Shell Linux C语言
Linux0.11 execve函数(六)
Linux0.11 execve函数(六)
19 1
|
2月前
|
Linux
Linux0.11 文件打开open函数(五)
Linux0.11 文件打开open函数(五)
37 0
|
5月前
|
Linux 开发者
Linux文件编程(open read write close函数)
通过这些函数,开发者可以在Linux环境下进行文件的读取、写入和管理。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
154 4
|
5月前
|
存储 Linux
Linux文件编程(open read write close函数)
Linux文件编程(open read write close函数)
203 0
|
Linux
Linux系统调用二、open()函数与close()函数介绍
Linux系统调用二、open()函数与close()函数介绍
351 0
Linux系统调用二、open()函数与close()函数介绍
|
Linux
Linux系统中利用open函数多次打开同一个文件操作方法
大家好。 今天的话主要和大家聊一聊,在Linux系统中如果一个文件被打开多次会出现什么情况。
638 0
Linux系统中利用open函数多次打开同一个文件操作方法
下一篇
无影云桌面