Linux下多进程编程
一、linux下通过进程编号管理程序运行,主要通过fork函数实现多进程编程。通过该函数,实现系统调用创建一个与原来进程几乎完全相同的进程,两个进程几乎可以完成一模一样的事情,通过初始参数的不同,实现不同的功能。主要通过返回值的不同区分进行类型, 返回0表示是子进程,如果是非0,则是创建的进程的id。
调用的格式为:
1 int mypid; 2 mypid = fork(); 3 if(mypid < 0){ 4 //创建进程失败,也许是内存不足,也许是进程总数不足 5 }else{ 6 if(mypid == 0){ 7 //子进程代码 8 }else{ 9 //父进程代码 10 } 11 }
二、模拟shell终端,代码(test7_1.c)
1 //This is c program code! 2 /* *=+=+=+=+* *** *=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= 3 * 文档信息: *** :~/test7_1.c 4 * 版权声明: *** :(魎魍魅魑)MIT 5 * 联络信箱: *** :guochaoxxl@163.com 6 * 创建时间: *** :2020年11月15日的下午06:35 7 * 文档用途: *** :数据结构与算法分析-c语言描述 8 * 作者信息: *** :guochaoxxl(http://cnblogs.com/guochaoxxl) 9 * 修订时间: *** :2020年第45周 11月15日 星期日 下午06:35 (第320天) 10 * 文件描述: *** :自行添加 11 * *+=+=+=+=* *** *+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+*/ 12 #include <stdio.h> 13 #include <sys/wait.h> 14 #define MAXLINE 100 15 16 int main(int argc, char **argv) 17 { 18 int pid; 19 int jg; 20 int status; 21 int len; 22 char buf[MAXLINE]; 23 24 printf("\n##myshell~~"); 25 while(fgets(buf, MAXLINE, stdin) != NULL){ 26 len = strlen(buf) - 1; 27 if(buf[len] == '\n'){ 28 buf[len] = 0; 29 } 30 pid = fork(); 31 if(pid < 0){ 32 printf("fork error!\n"); 33 }else{ 34 if(pid == 0){ 35 printf("\n"); 36 if(buf[0] == 'Q' && strlen(buf) == 1){ 37 exit(200); 38 } 39 jg = execlp(buf, buf, (char *)0); 40 if(jg == -1){ 41 printf("不能执行: %s\n", buf); 42 exit(127); 43 } 44 exit(0); 45 }else{ 46 if((jg == waitpid(pid, &status, 0)) < 0){ 47 printf("waitpid error\n"); 48 } 49 if(WEXITSTATUS(status) == 200){ 50 printf("退出。。。\n"); 51 break; 52 } 53 } 54 } 55 exit(0); 56 } 57 58 return 0; 59 }
代码比较简单不再啰嗦
人就像是被蒙着眼推磨的驴子,生活就像一条鞭子;当鞭子抽到你背上时,你就只能一直往前走,虽然连你也不知道要走到什么时候为止,便一直这么坚持着。