Linux C进程与多线程入门—(1)创建进程
来源:互联网 发布:传奇永恒网络传输异常 编辑:程序博客网 时间:2024/06/05 10:51
本文出自http:http://www.wenbanana.com/?p=351稻草人博客,欢迎访问!
进程和程序的区别
进程和程序的区别可以理解为,进程是活动的程序,而程序是一个代码的集合。进程是加载到内存中的程序,而程序没有加载到内存中,之在磁盘上保存着。下图是进程的结构,而程序进包含代码段。
代码实例
fork.c文件
#include <sys/types.h>#include <unistd.h>#include <stdio.h>int main(){ pid_t pid; char *message; int n; printf("fork program starting\n"); pid = fork(); switch(pid) { case -1: perror("fork failed"); exit(1); case 0: message = "This is the child"; n = 5; break; default: message = "This is the parent"; n = 3; break; } for(; n > 0; n--) { puts(message); sleep(1); } exit(0);}
(1)pid_t是进程号,是唯一表示进程的ID。
(2) pid_t fork(void) 函数
包含的头文件:#include <sys/types.h>
#include <unistd.h>
调用fork可以创建一个全新的进程。这个系统调用对当前进程进行复制。在进程表里创建一个新的项目,新项目的许多属性与当前进程是相同的。新进程和原进程几乎一模一样,执行的也是相同的代码,但新进程有自己的数据空间、自己的环境等。
(3)程序调用了fork函数的时候被分成了两个进程。在父进程里,fork函数返回新进程的PID进程号,新进程则返回0,这个可以做为区分父子进程的依据。
父进程和子进程的执行的代码都和fork.c里的代码一致。但是,fork根据不同进程返回不同的PID,那么父子进程的实际有效代码部分是不同的,下面我只写实际有效的代码:
就是说,进程会根据PID的不同,有选择的执行各自的代码。
这个程序将产生两个进程,新进程(子进程)会输出消息5次,而父进程之输出3次。父进程会在子进程打印完它的全部消息之前退出。运行一下这个程序,我们可以看到如下交替输出的消息:
这里要提醒大家一点,源文件虽然只有一个,但是运行的进程是2个,而不是1个,大家不要混淆。fork函数在父进程里创建了新的进程,两个进程执行的是相同的代码,即代码段是一样的。下面我以后台方式运行该文件的可执行文件(./a.out &)(在输出消息过程中,未输完),我使用ps命令输出当前运行的进程:
15922和15923是两个不同的进程,和上面说的一样。
参考文献: Linux程序设计
- Linux C进程与多线程入门—(1)创建进程
- Linux C进程与多线程入门—(2)等待进程
- Linux C进程与多线程入门—(3)信号
- Linux C进程与多线程
- Linux C进程与多线程入门—(4)简单多线程程序
- Linux C进程与多线程入门—(5)使用互斥量进行同步
- Linux进程与多线程
- linux c 创建进程
- linux c 创建进程
- Linux c 匿名管道实例—创建两个子进程与父进程进行管道通信
- Linux入门:创建守护进程
- Linux C编程--进程介绍1--进程的创建
- Linux C编程--进程介绍1--进程的创建
- linux C 进程 创建进程 详解
- Linux系统下C语言编程入门---进程创建
- linux进程(二)进程创建与调度
- Linux 多进程与多线程
- linux c (2) 创建进程
- etmvc+jQuery EasyUI Highcharts实现柱状图
- CPU同步机制漫谈
- 【mysql】查询过滤器ON,WHERE,HAVING
- Java把字符串中的数字删除的方法和判断字符串里面是否有汉字的方法
- Java判断字符串是否为空的方法
- Linux C进程与多线程入门—(1)创建进程
- HDU 1242 Rescue
- 结合UIImageView实现图片的移动和缩放
- 【转载】oracle相关时间计算,得到季度第一天、最后一天
- 21.输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.
- main函数执行前后的代码
- linux platform 驱动模型分析
- USB开发步骤【52RD】
- Apache Http Server和Tomcat 之区别