进程和程序的区别:
j进程是活动的程序,而程序是一个代码的集合。进程是加载到内存中的程序,而程序没有加载到内存中,只是在磁盘上存储着。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | # include <sys/types.h> # include <unistd.h> # include <stdio.h> int main() { pid_t pid ; char * message; printf( "fork process staring \n" ); pid = fork(); switch (pid) { case - 1 : perrro( "fork failed \n" ); exit( 1 ); case 0 : mesage = "this is the child\n" ; n = 5 ; break ; default : message = "this is the parent \n" ; n = 3 ; break ; } for (; n> 0 ;n-= 1 ) { puts(message); sleep( 1 ); } exit( 0 ); } |
(1)pid_t 是进程号,是唯一表示进程的id。
(2)pid_t fork(void)函数 包含的头文件:#include<unistd.h>
#include<sys/types.h>
调用fork可以创建一个全新的进程,这个系统调用对当前进程进行复制。在进程表里创建一个新的项目,新项目的许多属性与当前进程是相同的。新进程河源进程几乎一样样的。执行的也是相同的代码,但新进程有自己的数据空间自己的环境等。
(3)程序调用了fork函数的时候被分成了两个进程,。在父进程里,fork函数返回新进程的pid 进程号,新进程则返回0,这个可以作为区分父子进程的一句。
父进程和子进程的执行的代码都和fork.c里的代码一致。但是,fork根据不同进程返回不同的pid,那么父子进程的实际有效代码部分是不同的,下面我只写实际有效的代码:
也就是说,进程会根据pid的不同,有选择的执行各自的代码。这个程序将产生两个进程,新进程(子进程)会输出5此,而父进程3此。父进程会在子进程打印完他的全部信息之前推出。
提醒大家一下:源文件虽然只有一个,但是运行的进程是两个,而不是1个。fork()函数在父进程里创建了新的进程,两个进程执行的是相同的代码,即代码是一样的。