判断父子进程,使用fork进程函数的使用

1、编程时使用getpid函数获取自身的进程标识符,getppid获取父进程的进程标识符。

2、使用fork函数创建一个进程

fork进程函数的原型: 

pid_t  fork(void);

fork 函数调用成功,返回两次
返回值为0,代表当前进程是子进程;
返回值为非负数,代表当前进程是父进程
调用失败,返回-1

使用fork函数来判断父子进程

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

int main()
{
   pid_t pid;
   
   printf(" pid is :%d\n",getpid());

   pid= fork();     
  
  if(pid >0)
       printf("this is father print,pid=%d\n",getpid());
   else if(pid == 0)
       printf("this is child print, child pid is :%d\n",getpid());
   return 0;
}

打印

pid is :18034
this is father print,pid=18034
this is child print, child is :18035

父子进程都会进行fork()函数下面的代码,因为他们的pid不同所以打印的结果不同。


程序通过fork调用返回确定进程,当用fork启动一个子进程时,子进程就有了它自己的生命周期并将独立运行。

我们可以通过fork创建一个新的进程,在调用fork时被分为两个独立的进程(复制一个新的进程)。新的进程几乎与原进程一摸一样,执行的代码也完全一样,但新进程有自己的数据空间、环境、和文件描述符。

如上图所示,在父进程中的fork调用返回的是新的子进程的pid,新的进程将会继续执行,就像原进程一样,不同之处在于,子进程中的fork调用返回d的是0。父子进程可以通过这一点判断谁是父进程,谁是子进程。

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

int main()
{
   pid_t pid;
   pid_t pid2;
   pid_t retpid;

   pid=getpid();
   printf(" before fork pid=%d\n",pid);

   retpid= fork();     
  
   pid2=getpid();
   printf("after fork  pid=%d\n",pid2);
  
   if(pid == pid2)
      printf("this is father print , retpid= %d\n",retpid);
   else
      printf("this is child print ,retpid=%d, child pid= %d\n",retpid,getpid());

   return 0;
}

打印结果

before fork pid=3575
after fork  pid=3575
this is father print , retpid= 3576
after fork  pid=3576
this is child print ,retpid=0, child pid= 3576

1、查看进程
ps -aux | grep init      top
2、c语言储存空间分配
代码段(if for) 数据段(初始化的变量)bss段(函数外未初始化的变量)、堆(mallco)、栈(函数参、以及返回值)
3、获取进程ID getpid()  定义 pid_t pid=getpid()
fork() 返回两次,子进程返回的是0,父进程返回的是    新子进程的进程ID


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值