linux 下的多进程和多线程的使用方法及对比
2015-01-09 16:12
232 查看
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.
相关文章推荐
- 多线程写文件异常(正由另一进程使用,因此该进程无法访问该文件)的解决方法
- linux 内核进程与用户进程的通信 方法一 使用sockopt与内核交换数据
- linux内核的等待队列使用方法,wait_queue_head_t,进程休眠
- 多线程使用linux时间函数的方法
- 【Linux】使用gdb调试多进程多线程程序
- 多线程写文件异常(正由另一进程使用,因此该进程无法访问该文件)的解决方法
- linux内核的 等待队列 使用方法,wait_queue_head_t,进程休眠
- linux下使用Shell显示运行脚本进程号的方法
- Linux任务调度进程crond命令的使用方法和注意事项
- Linux:如何使用gdb调试多进程多线程程序
- linux内核的 等待队列 使用方法,wait_queue_head_t,进程休眠
- Unix/Linux中进程控制相关命令总结&, jobs, fg, bg等命令的使用方法
- 多线程使用linux时间函数的方法
- Linux任务调度进程crontab的使用方法和注意事项
- linux 内核进程与用户进程的通信 方法一 使用sockopt与内核交换数据
- 多线程写文件异常(正由另一进程使用,因此该进程无法访问该文件)的解决方法
- Unix/Linux中进程控制相关命令总结——&, jobs, fg, bg等命令的使用方法
- Linux 技巧:让进程在后台可靠运行的几种方法 用 cron 和 at 调度作业 使用 screen 管理你的远程会话
- linux下使用gdb调试多进程多线程
- python学习笔记4:多进程和多线程的使用方法和区别