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 }

  代码比较简单不再啰嗦

posted @ 2020-11-18 19:54  叕叒双又  阅读(384)  评论(0编辑  收藏  举报