普通单进程筛质数:
eg:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #define LEFT 30000000 #define RIGHT 30000200 int main(void) { int i , j , mark ; for(i = LEFT ; i < RIGHT ; i++) { mark = 1 ; for(j = 2 ;j < i/2 ; j++) { if(i % j == 0) { mark = 0 ; break; } } if(mark) printf("%d is a primer ",i); } exit(0); }
[root@localhost pro]# ./primer | wc -l 管道计数 记行数
18
[root@localhost pro]# time ./primer > /tmp/out
real 0m1.059s用户的体验时间
user 0m0.976s
sys 0m0.004s
=================================================================
wait函数
/**********wait()需要的库函数******/ #include <sys/types.h> #include <sys/wait.h>
/***************** *功能:等待进程状态发生变化 *参数:进程状态:把当前的子进程收尸的状态放到一个整型的变量中去 WIFEXITED:是否正常终止,返回真 WEXITSTATUS:进程结束的状态(前提正常结束返回状态) WIFSIGNALED:信号终止的返回真 WTERMSIG:返回信号编号(信号打断) ...... *返回值:成功返回终止的子进程的ID号,失败返回-1 *****************/ pid_t wait(int *status);
waitpid()函数
#include <sys/types.h> #include <sys/wait.h> /********************************** *功能:等待进程状态发生变化 *参数:pid:pid > 0:收子进程的进程ID号 * pid = 0:收任何的同组的子进程 * pid =-1:收任何子进程 * pid < -1:收任何同组的绝对值的子进程eg:pid = -5 那么收 同组pid = 5 的子进程 * status:将进程结束后的状态存储到整型变量中 * options:位图:WNOHANG:如果没有任何子进程立刻退出 * wait是阻塞,加上WNOHANG就是非阻塞 *返回值:成功返回子进程ID,如果WNOHANG被使用子进程状态未发生变化成功返回0,失败返回-1 * ********************************/ pid_t waitpid(pid_t pid , int *status ,int options);
eg:修改后
创建了201个子进程做这个工作,不建议使用。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h>
#define LEFT 30000000 #define RIGHT 30000200 int main(void) { int i , j , mark ; pid_t pid ; //0.父进程负责累加和创建进程 for(i = LEFT ; i < RIGHT ; i++) { //1.创建RIGHT - LEFT 个进程 pid = fork(); if(pid < 0 ) { perror("fork()"); exit(1); } //2.子进程处理 if(pid == 0) { mark = 1 ; for(j = 2 ;j < i/2 ; j++) { if(i % j == 0) { mark = 0 ; break; } } if(mark) printf("%d is a primer ",i); exit(0); } } //3.收尸 for(i = LEFT ; i<=RIGHT ;i++) wait(NULL); exit(0); }
==========================================================================
子进程使用同一块物理内存空间
如果只读方式,父子进程都不会改变物理内存空间
如果父子进程想要修改某块物理内存
1.首先把物理内存模块copy一份
2.修改页表指针指向copy后的地址
3.修改自己的那块物理内存空间,谁想修改谁copy.