Linux fork详解

fork - create a child process

		功能:创建一个子进程

原型:pid_t fork(void);

	参数:无
	返回值:
			该函数共返回俩次,一个返回值为0,若返回值为0,则是进入子进程
			另一个返回值>0,该返回值代表是进入父进程,且该大于0的值就是
			子进程的进程PID
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(){
        pid_t pid;

        pid = fork();

        printf("pid = %d\n",pid);
        return 0;
}

运行结果:
pid = 30094
pid = 0

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

int main(){
        pid_t pid;

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

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

        return 0;
}

运行结果

this is father,pid = 29831 getpid()=29830
this is child,pid = 0 getpid()=29831

getpid()用于获取当前进程的pid

首先了解一下什么是进程,进程就是一个程序跑起来,Linux下./a.out
运行一个程序,程序的运行就是一个进程,程序运行结束该进程就结束

第一个案列程序直接fork,但结果共打印了俩次结果,相当于调用了
俩次printf,可以错误理解为就是该程序跑了俩次

实际是fork()之后是创建一个子进程,可以理解为fork之后,类似于打开
了俩个管道,一个是父进程,一个是子进程,程序会将fork之后的代码
通过父子进程这两个管道分别执行一遍。结合fork返回值看第二个案列程序,
可以得出:

fork用于创建一个子进程,fork之后将代码复制一份给子进程,通过判断fork的两个返回值可以进入不同的进程,一个返回值大于0(这是子进程的pid),另一个返回值等于0

ps aux 查看当前所有运行程序的运行状态
ps aux|gerp init 检索目前所有带有init字段的程序的运行状态
top 查看当前多有程序资源占用情况

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值