[PHP]進程篇

發表于:2007-05-25來源:作者:點擊數: 標簽:php進程
最近寫了一個 監控在線進程的程序. 目的是為了 能實時監控執行程序是否斷線,并及時重啟。 用PHP寫的,不算難,還成,但對于自己來講挺有成就感的。 程序部分略

最近寫了一個 監控在線進程的程序.

目的是為了 能實時監控執行程序是否斷線,并及時重啟。

用PHP寫的,不算難,還成,但對于自己來講挺有成就感的。

程序部分略省。

#將perl進程指向到一個文本中。  $psfile
$command = "ps ax | grep perl | grep -v \"> $psfile\" >$psfile";
exec($command);

 $process_array = file($psfile);   #打開文本
 $sum_process = sizeof($process_array);  #文本的每一行作為數組元素,此sizeof 則是 取元素個,即行數。

for ($i=0 ; $i < $sum_process ; $i++)
 {
  echo $process_array[$i]."\n";                                 #$process_array[$i]  為文本中i行的記錄
  echo $province_id[$PID]."\n";  
   if(strstr($process_array[$i],$province_id[$PID]))    # 對比是否存在進程
   {
    echo "有進程\n";
    $thread=1;
    break;
   }
   
 }


$command = "perl ".$program." > ".$phppath.$name."abc.txt &";   #重起進程命令
 system($command);  #重起進程

 特別說明:

1. 命令 ps ax | grep perl | grep -v "> $psfile" >$psfile 

    很奇怪: ps ax|grep perl > abc.dat (命令正確) 在sh里執行 與 用PHP 執行 輸出結果會不同,所以需要加入 一個 管道  | grep -v "> $psfile"  就可以。大致作用是-v 不匹配$psfile  而且其他的輸出。 具體原因不明挺奇怪的。

2. system() 函數

    PHP的此函數有個毛病 ~ 是執行時,它必須把當前的進程程序執行完后才會跳出,繼續循環下一個需要重啟的程序,就是說 如果有多個進程需要重啟的話,那么此函數只能是一直等待 當前的進程程序執行完,才能重啟下一個。。。。。。。。。。。。(汗顏)

解決方案:  將命令 寫成后由后臺執行。  就是---》 多加一個  &  (別小看這個~ 可解決了大問題)

例 : perl abc.pl > abc.dat & 

OK~

大功告成! ~^-^~

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97