• 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("
    ##myshell~~");
    25     while(fgets(buf, MAXLINE, stdin) != NULL){
    26         len = strlen(buf) - 1;
    27         if(buf[len] == '
    '){
    28             buf[len] = 0;
    29         }
    30         pid = fork();
    31         if(pid < 0){
    32             printf("fork error!
    ");
    33         }else{
    34             if(pid == 0){
    35                 printf("
    ");
    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
    ", buf);
    42                     exit(127);
    43                 }
    44                 exit(0);
    45             }else{
    46                 if((jg == waitpid(pid, &status, 0)) < 0){
    47                     printf("waitpid error
    ");
    48                 }
    49                 if(WEXITSTATUS(status) == 200){
    50                     printf("退出。。。
    ");
    51                     break;
    52                 }
    53             }
    54         }
    55         exit(0);
    56     }
    57 
    58     return 0;
    59 }

      代码比较简单不再啰嗦

  • 相关阅读:
    ubuntu下 apt-get install 下载的文件存放的目录
    ubuntu 上更新安装 openoffice.org3的过程
    ubuntu中flash的中文乱码解决方法
    ubuntu 安装AMP环境的笔记 Prefork方式与fast-cgi方法
    socket 基础知识
    php 处理透明背景的图片时的问题
    RHEL 8 Speculation
    心之力
    (OK) 在内核中,获得 某目的地址的下一跳的数目,kernel 4.4
    Linux内核分析
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/14001791.html
Copyright © 2020-2023  润新知