linux新建进程--fork

fork用于创建新进程,新进程与原进程具有从属关系,原进程称之为父进程,新建进程称为子进程,此进程还有其他什么关系呢?
1. 进程号
子进程的父进程应该为原进程,原进程的子进程应该为新建的进程号。
2. 返回值
使用fork新建进程返回值有三种,出错返回-1,0返回给子进程 ,大于0的正整数返回给父进程。
3. 数据共享
子进程会复制父进程的所有数据,在fork进程之前是数据会被复制到子进程中,一般通过返回值来判断子进程执行的内容。

 int main()
{
    pid_t pid;
    int i = 0;

    pid = fork();

    if (pid == -1) //创建失败
    {
        printf("creat process error!\n");
        exit(1);
    } 
    else if (pid == 0) //子进程
    {
    printf("The child process ID is %d\n",getpid());
        i++;
    } 
    else // 父进程
    {
    printf("The father process ID is %d\n",getpid());
        i++;
    }
    printf("i = %d\n", i);
    return 0;
}   
首先看一下此程序段,按照常规的if...else...  的逻辑两段代码应该是矛盾的,不会同时执行,但是实际上却同时执行了,那么原因是什么呢?原因在于上面的第2点,返回值的返回为0给子进程,大于0给父进程。由于在采用fork之后,有两个进程同时执行,只不过在两个进程中,子进程执行的是if内的内容,而父进程执行的是else的内容,执行的程序段不一样而已,并不矛盾。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值