zoukankan      html  css  js  c++  java
  • execvp php-fpm reload使用的函数

    php重启 本质上是调用 

    execvp("/usr/local/php/sbin/php-fpm");

    execvp就是用一个新的进程把自己替换掉,一个进程一旦调用exec类函数,它本身就"死亡"了,系统把代码段替换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配新的数据段与堆栈段,唯一留下的,就是进程号,也就是说,对系统而言,还是同一个进程,不过已经是另一个程序了。(不过exec类函数中有的还允许继承环境变量之类的信息。1>exec()函数调用并没有生成新进程,一个进程一旦调用exec函数,它本省就“死亡了”--就好比被鬼上身一样,身体还是你的,但灵魂和思想已经被替换了 --系统把代码段替换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配新的数据段与堆栈段,唯一保留的就是进程ID。也就是说,对系统而言,还是同一个进程,不过执行的已经是另外一个程序了

    #include <errno.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    
    char command[256];
    void main()
    {
       int rtn;
       while(1) {
           printf( ">" );
           fgets( command, 256, stdin );
           command[strlen(command)-1] = 0;
            execlp( command, NULL );
            printf("execute done
    ");
              perror( command );
              exit( errno );
       }
    }

    gcc -o execvp execvp.c

    ./execvp

    >

     

    此时

    root@taek:~# ps aux|grep execvp

    root      6158  0.0  0.0   4084   692 pts/2    S+   14:58   0:00 ./execvp

    root      6160  0.0  0.1  12700  1780 pts/3    S+   14:58   0:00 grep execvp

     

     

    root@taek:/home/study_c# ./execvp 

    >./execvp

    >

     

    root@taek:~# ps aux|grep execvp

    root      6158  0.0  0.0   4084   640 pts/2    S+   14:58   0:00 [execvp]

    root      6162  0.0  0.0   3028   264 pts/3    R+   14:58   0:00 grep execvp

     

    会发现执行execvp的进程号没有变

  • 相关阅读:
    实验一、DOS使用命令实验
    实验三、进程调度模拟程序
    实验四、存储管理
    实验二、作业调度模拟程序
    简单的DOS命令
    结构化方法和面向对象方法的比较
    jstree 取消选中父节点
    T4 模板代码生成
    基于Open XML 导出数据到Excel
    菜单(列存储转为行存储)
  • 原文地址:https://www.cnblogs.com/taek/p/6394171.html
Copyright © 2011-2022 走看看