• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Linux进程控制详解及实例

    Linux进程控制详解及实例

    常用函数:

    进程的建立

      如果fork()调用成功,就会使内核建立一个新的进程,所建的新进程是调用fork()进程的副本。也就是说,新的进程运行与其创建者一样的程序,其中的变量具有与创建进程变量相同的值。

      系统调用fork()没有参数,它返回一个pid_t类型的值pid。pid被用来区分父进程和子进程。在父进程中pid被置为一个非0的正整数;在子进程中,pid被置为0。

    进程的运行

      exec系列调用:

    int execl(const char* path, const char *arg, ...);
    
      int execlp(const char * file, const char *arg, ...);
    
      int execle(const char *path, const char *arg, ..., char * const envp[]);
    
      int execv(const char* path, char *const argv[]);
    
      int execvp(const char* file, char * const argv[]);
    
    

      由于参数的个数是任意的,所以必须用一个null指针来标记参数表的结尾。下面给出一个使用execl()和execv()调用来运行ls的例子:   

    /*execl的例子*/
    #include stdio.h>
    #include unistd.h>
    
    main(){
      printf("Excuting ls\n");
      execl("/bin/ls", "ls", "-l", NULL);
      /*如果execl返回,说明调用失败*/
      perror("execl failed to run ls");
      exit(1);
    }
    
    /*execv的例子*/
    #include stdio.h>
    #include unistd.h>
    
    main(){
      char *cmd[]={"ls", "-l", NULL};
      execv("/bin/ls", cmd);
      perror("execv failed");
      exit(1);
    }

    系统调用execlp()和execvp()分别类似于系统调用execl()和execv(),它们的主要区别是:execlp()和execvp()的第一个参数指向的是一个简单的文件名,而不是一个路径名。它们通过检索shell环境变量PATH指出的目录,来得到该文件名的路径前缀部分。

    exec和fork()的联用

      通过联用可以实现父进程运行一个与其不同的子进程,并且父进程不会被覆盖。下面给出一个 exec和fork()联用的例子:  

    #include stdio.h>
    #include unistd.h>
    
    main(){
      int pid;
      /*fork子进程*/
      pid = fork();
      switch(pid){
        case -1:
          perror("fork failed.");
          exit(1);
        case 0:
          execl("/bin/ls", "ls", "-l", NULL);
          perror("execl failed.");
          exit(1);
        default:
          wait(NULL);
          printf("ls completed.\n");
          exit(0);
      }
    }

      在fork()调用之前,只有一个进程A,fork()调用后就有了进程A和B。A是父进程,它正在执行系统调用wait(),使进程A睡眠,直至进程B结束。同时进程B正在用execl装入命令ls。exec调用后,进程B的程序被ls的代码取代,执行ls命令的代码。

     感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    您可能感兴趣的文章:
    • Linux中有效地管理进程的8个命令
    • Linux中关于控制进程的命令总结
    • 详解Supervisor安装与配置(Linux/Unix进程管理工具)
    • Linux运维基础进程管理及环境组成分析
    上一篇:linux 守护进程详解及建立守护进程
    下一篇:Git 创建分支提交远程分支详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Linux进程控制详解及实例 Linux,进程,控制,详解,及,