我有一個網頁向cgi腳本發送請求,該腳本基本上必須tar和壓縮可能超過50G的巨大目錄。我在我的cgi腳本中派生了一個進程,用於執行tarling任務,同時向父母腳本中的網頁發送響應消息。但是,父腳本(即使沒有waitpid($ pid,0))等待焦油過程結束,然後將味精發送到網頁,然後通過警告框打印。有沒有一種方法可以立即發送msg,以便用戶知道tarling過程已經啓動,並且該進程可以在後臺進行。我不想執行exec(),因爲我需要在創建此tar時捕獲任何錯誤球。如何同時運行子進程和父進程
另外,會不會有任何記憶的問題,而我試圖焦油這麼大的目錄?
$SIG{CHLD} = 'IGNORE';
$|++;
$pid = fork();
if($pid){ sendResponse($data); exit; }
elsif($pid == 0)
{
setsid();
$gpid = fork();
if(! $gpid)
{
qx(tar up big directories over 50G...);
}
}
謝謝!所以,如果我取消緩衝文件句柄($ |),我應該能夠立即發送響應。客戶端和服務器之間沒有數據交換,除了這個msg。爲了避免在客戶端打印'超時'消息,分離孩子是否明智? – Wilderness 2011-04-25 23:19:59
如果父母和孩子之間沒有數據交換,也沒有父母徘徊的理由,那麼分離就有意義。 此外,在父母關閉時(假設孩子被分離),任何輸出都應發送給客戶。所以,如果解除關聯孩子,你不需要緩存標準輸出。 – IndyGreg 2011-04-26 00:48:59
完美!萬分感謝 !將嘗試一下。 – Wilderness 2011-04-26 01:41:18