fork函数实现循环打印父子进程

 本次文章讲述的是:

                                如何利用fork函数实现对父子进程的循环打印。

首先,我们通过man手册,查看fork函数的用法以及头文件:man 2 fork(第一页为shell用户命令,第二页为系统调用,第三页为库函数),这里调用的是第二页,查找第二页得到如图:

SYNOPSIS
       #include <sys/types.h>
       #include <unistd.h>

       

        pid_t fork(void);

这里包含#include <sys/types.h>#include <unistd.h>两个头文件,函数原型为pid_t fork(void);pid_t 很明显为类型重命名,这里需要注意的是fork函数的返回值,当它等于0时处于子进程中,当它大于0时处于父进程中,小于0时出错。所以我们可以通过getpid()函数得到子进程号,getppid()函数得到父进程号(注意他们的头文件)来实现父子进程号的打印。

#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main(int argc, char *gc, char *arargv[])
{ 
    pid_t p = getpid();
    printf("before ppid = %d\n",p);
    int n = 0;
    pid_t pid = -2;  //这里我们将pid设为不为0的值,避免与下面while条件冲突
    while(n < 5 && pid !=0)      //循环五次
    {
        pid = fork();
        if(pid == -1)    //判断是否子进程创建
        {
            perror("fork error");
        }
        if(getpid() != p)    //判断父进程号与子进程号
        {
            printf("child pid:%d  ",getpid());
            printf("parent ppid:%d\n",getppid());
            puts("");
           // sleep(1);        //需要看清实验过程可加入sleep,头文件已加
        }
        waitpid(pid,NULL,0);    //这里运用waitpif函数可以将子进程回收
        n++;
    }
            return 0;
} 

 具体的函数过程就在上面了,这里我们循环的是五次,并且打印了父子进程号,其中的小细节可自行修改,结果如下:

$gcc 2fork.c

$ ./a.out

before ppid = 233393
child pid:233394  parent ppid:233393

child pid:233395  parent ppid:233393

child pid:233396  parent ppid:233393

child pid:233397  parent ppid:233393

child pid:233398  parent ppid:233393

另外我们也可以用for循环来执行,这里就不过多阐述,感兴趣的朋友可以自行尝试!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值