美文网首页
linux应用程序进程等待

linux应用程序进程等待

作者: 嵌入式工作 | 来源:发表于2018-11-07 11:58 被阅读0次

1进程等待,fork创建的进程使子进程优先运行,

2.方法:

wait
waitpid

3演示代码如下

#include<stdlib.h> 
#include <stdio.h>
#include <unistd.h>
#include <errno.h>

int main(void)
{
    
    pid_t child;
    
    if((child=fork())==-1)
    {
        printf(" fork error :%d \n",strerror(errno));
        exit(1);
    }else if(0==child)//child 进程
    {
        printf("====child===start===\n");
        sleep(3);
        printf("*****child:%d**********\n",getpid());
        exit(0);
        
    }else 
    {
      printf("====father===start===\n");
        wait(NULL);//等待子进程结束
       // waitpid(-1, NULL, 0);
        printf("*****father:%d**********\n",getpid());
        exit(0);
    }
    
}

4演示结果

test@ubuntu:~/test$ gcc -o wp wait_waitpid.c 
test@ubuntu:~/test$ ./wp
====father===start===
====child===start===
*****child:15728**********
*****father:15727**********
test@ubuntu:~/test$ 

5waitpid相关知识点

waitpid相关知识点
#include <sys/types.h> 
#include <sys/wait.h>
pid_t waitpid(pid_t pid,int *status,int options);
pid<-1  等待进程组号为pid绝对值的任何子进程。
pid=-1  等待任何子进程,此时的waitpid()函数就退化成了普通的wait()函数。
pid=0   等待进程组号与目前进程相同的任何子进程,也就是说任何和调用waitpid()函数的进程在同一个进程组的进程。
pid>0   等待进程号为pid的子进程。


WIFEXITED(status)   如果子进程正常结束,它就返回真;否则返回假。
WEXITSTATUS(status) 如果WIFEXITED(status)为真,则可以用该宏取得子进程exit()返回的结束代码。
WIFSIGNALED(status) 如果子进程因为一个未捕获的信号而终止,它就返回真;否则返回假。
WTERMSIG(status)    如果WIFSIGNALED(status)为真,则可以用该宏获得导致子进程终止的信号代码。
WIFSTOPPED(status)  如果当前子进程被暂停了,则返回真;否则返回假。
WSTOPSIG(status)    如果WIFSTOPPED(status)为真,则可以使用该宏获得导致子进程暂停的信号代码。


参数options提供了一些另外的选项来控制waitpid()函数的行为。如果不想使用这些选项,则可以把这个参数设为0。
主要使用的有以下两个选项:
参数  说明
WNOHANG 如果pid指定的子进程没有结束,则waitpid()函数立即返回0,而不是阻塞在这个函数上等待;如果结束了,则返回该子进程的进程号。
WUNTRACED   如果子进程进入暂停状态,则马上返回。

相关文章

网友评论

      本文标题:linux应用程序进程等待

      本文链接:https://www.haomeiwen.com/subject/rqnmxqtx.html