程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php操作進程

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~

大功告成! ~^-^~

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved