execvp php-fpm reload使用的函數

php重啓 本質上是調用 php

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

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\n");
          perror( command );
          exit( errno );
   }
}

 

gcc -o execvp execvp.cphp-fpm

./execvpspa

>code

 

此時blog

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 execvpget

 

 

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的進程號沒有變

相關文章
相關標籤/搜索