linux 下的多进程和多线程的使用方法及对比

linux 下的多进程和多线程的使用及对比,系统 Ubuntu 14.04 编译器gcc 4.9

            linux 下创建进程的函数原型是: pid_t fork(void);这个函数没有参数,却有一个返回值.返回值得的类型是pid_t,其实是pid_t 在32位Linux操作系统下是一个int 型的整数.具体可见pid_t的头文件定义.从pid_t 的名字上可以看出,它代表着相关进程的进程号.

           fork()这个函数比较特殊.其返回值有3种可能.

1.如果调用失败,则返回-1.一般出现的几率很小

2.如果调用成功,返回值有两个,一个是大于0的整数,代表父进程调用返回.另一个是等于0的整数,代表子进程调用返回.

具体用法见以下代码:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main()
{
    pid_t pid1;
    if((pid1=fork())<0)
    {
        perror("fork()");
        exit(-1);
    }
    else if(0 == pid1)
    {
        printf("I am child process!\n");
        exit(0);    
    }
    else
        printf("I am parent process!\n");
        wait(NULL);
        return 0;
}

 返回结果如下图: 

注意创建多进程的时候,不要忘记调用wait或者waitpid,回收子进程.以免产生僵尸进程.

下面我们来看一下这个例子.见以下代码:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main()
{
    pid_t pid1;
    int tempa=0;
    if((pid1=fork())<0)
    {
        perror("fork()");
        exit(-1);
    }
    else if(0 == pid1)
    {
        while(1)
        printf("I am child process B!\n");
        exit(0);    
    }
    else
        while(1)
        printf("I am parent process A!\n");
        wait(NULL);
    return 0;
}

结果如下:

父子进程交替进行.

再看一个程序:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main()
{
    pid_t pid1;
    int tempa=0;
    if((pid1=fork())<0)
    {
        perror("fork()");
        exit(-1);
    }
    else if(0 == pid1)
    {
        tempa++;
        printf("I am child process A,tepma is %d.\n",tempa);
        exit(0);    
    }
    else
        tempa++;
        printf("I am parent process B,tempa is %d.\n",tempa);
        wait(NULL);
    return 0;
}

结果如下图:

这个结果说明了,在多进程下,进程空间的资源是隔离的子进程的,tempa和父进程的tempa是相互独立的,不受影响的.所以最后的输出结果都是1.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值