php

2013-07-28 3 views
7

में घोषणापत्र (टिक) और सिग्नल हैंडलर के बीच संबंध क्या है मेरे पास कुछ कोड है, और मैं समझना चाहता हूं कि कांटा कैसे काम करता है, लेकिन मैं declare(ticks=1) से उलझन में हूं। जब मैंने इसे पहली पंक्ति में रखा, बच्चे की प्रक्रिया समाप्त होने के बाद, सिग्नल हैंडलर को बुलाया जाएगा, जो मैं चाहता हूं; लेकिन जब मैं इसे हटा देता हूं, सिग्नल हैंडलर कभी नहीं बुलाया जाएगा! इसलिए, मैं जानना चाहता हूं कि टिक सिग्नल प्रोसेसिंग को कैसे प्रभावित करती है।php

<?php 
declare(ticks=1); 
function sigHandler($signal) 
{ 
    echo "a child exited\n"; 
} 
pcntl_signal(SIGCHLD, sigHandler, false); 
echo "this is " . posix_getpid() . PHP_EOL; 
for($i=0; $i<3; $i++) 
{ 
    $pid = pcntl_fork(); 
    if($pid == -1) 
    { 
     echo 'fork failed ' . PHP_EOL; 
    } 
    else if($pid) 
    { 
    } 
    else 
    { 
     $pid = posix_getpid(); 
     echo 'child ' . $pid . ' ' . time() . PHP_EOL; 
     sleep(rand(2,5)); 
     echo 'child ' . $pid . ' done ' . time() . PHP_EOL; 
     exit(0); 
    } 
} 
do 
{ 
    $pid = pcntl_wait($status); 
    echo 'child quit ' . $pid . PHP_EOL; 
}while($pid > 0); 
echo 'parent done' . PHP_EOL; 
?> 

उत्तर

9

माइनर अवलोकन (समारोह नाम बोली कृपया।):

pcntl_signal(SIGCHLD, 'sigHandler', false); 

दो अलग-अलग शामिल एपीआई रहे हैं।

  • pcntl_wait() कॉल तब तक अवरुद्ध हो रहा है जब तक कि यह कर्नेल से अधिसूचना प्राप्त न हो जाए।
  • इंटरप्ट हैंडलिंग PHP दुभाषिया के अंदर एक ईवेंट लूप है। यह एक हैक सुविधा है और PHP5.3 के रूप में, ~ pcntl_signal_dispatch() करने का एक बेहतर तरीका है।
    • सवाल का जवाब करने के लिए, घोषित होने टिक्स अपने मोबाइल रिंगटोन को चालू करने, या अन्यथा आप आने वाली कॉल नोटिस कभी नहीं की तरह है।
    • PHP5.3 विधि बहुत बेहतर इंजीनियरिंग है, और बहुत अधिक नियंत्रित करने योग्य है।
    • अधिकांश सिग्नल के लिए डिफ़ॉल्ट सिग्नल हैंडलर सिग्नोरोर है, जो बाधा प्राप्त करता है और कुछ भी नहीं करता है। जैसा कि आपने उपयोगकर्ता हैंडलर पंजीकृत किया है, मुझे संदेह है कि इसका उपयोग किया जा रहा है।
    • मैं सीधे सेट नहीं होने पर, टिक के लिए डिफ़ॉल्ट मान खोज नहीं पाया है।
    • टिक्स को एक छोटे से मूल्य पर सेट करने से स्क्रिप्ट्स धीमी गति से चलती हैं, लेकिन आपको यह देखने के लिए भारी प्रसंस्करण और निगरानी करने की आवश्यकता है। यह कम अनुमानित निष्पादन लागत बनाता है, मुझे लगता है कि स्टैक में चीजों की प्रतिलिपि बनाने के कारण।
    • के बिना या pcntl_signal_dispatch() को घोषित करें, सिग्नल कभी नहीं उठाया जाता है। यदि आप सरल वेबपृष्ठ लिख रहे हैं, जो जल्दी समाप्त हो जाते हैं; यह सबसे समझदार नीति हो सकती है।
    • घोड़े की घोषणा को सावधानीपूर्वक परीक्षण करने की आवश्यकता है, क्योंकि इसमें घोटाले के नियमों को भ्रमित कर दिया गया है। इसे अपनी पहली स्क्रिप्ट के शीर्ष पर रखने की सबसे सुरक्षित विधि, जैसे पर्ल में सख्त का उपयोग करें।
+0

आपके उत्तर के लिए धन्यवाद – zhaozhi

संबंधित मुद्दे

 संबंधित मुद्दे