PHP kullanarak Çatallı İzleme Çocuklar

1 Cevap php

Ben PHP bir süreç çatal pcntl_fork kullanmak, bir sorun var

$pid = pcntl_fork();
if ($pid == -1) {
 die('could not fork');
} else if ($pid) {
 // we are the parent
 pcntl_wait($status); //Protect against Zombie children
} else {
 pcntl_exec("/path/to/php/script");
 echo "Could not Execute...";
}

Ben üst çatal Çocuk gibi idam PHP script durumunu izlemek için bir yol bulmaya çalışıyorum. Kullanarak üst sürecine çocuğun tüm mesajları yakalamak için çocuğun komut dosyası yürütme ve sırasında gündeme herhangi bir ölümcül hata varsa çocuk hala çalışıyor veya eğer bildiğimiz bir yolu var mı;

pcntl_signal(SIGUSR1, "signal_handler");

Thanks & Regards,
Arun Shanker Prasad.

1 Cevap

Kesinlikle çocuk sürecini izleyebilirsiniz:

$pid = pcntl_fork();
if ($pid == -1) {
 die('could not fork');
} else if ($pid) {
 // we are the parent
 pcntl_waitpid($pid, $status, WUNTRACED); //Protect against Zombie children
 if (pcntl_wifexited($status)) {
   echo "Child exited normally";
 } else if (pcntl_wifstopped($status)) {
   echo "Signal: ", pcntl_wstopsig($status), " caused this child to stop.";
 } else if (pcntl_wifsignaled($status)) {
   echo "Signal: ",pcntl_wtermsig($status)," caused this child to exit with return code: ", pcntl_wexitstatus($status);
 }
} else {
 pcntl_exec("/path/to/php/script");
 echo "Could not Execute...";
}
  • durum kodu normal bir çıkışı temsil ediyorsa Çekler - () pcntl_wifstopped
  • pcntl_wifstopped () - Çocuk sürecin durmuş olup olmadığını denetler
  • pcntl_wifsignaled () - Durum kodunun bir sinyal sebebiyle bir fesih temsil olmadığını denetler
  • pcntl_wexitstatus () - Bir sonlandırılmış çocuğun dönüş kodunu döndürür
  • pcntl_wtermsig () - Çocuk sonlanmasına sebep olan sinyali döndürür
  • pcntl_wstopsig () - Çocuk durdurmak için neden sinyali döndürür

EDIT:

Ebeveyn ve çocuk süreç arasındaki mesajlaşma ile ilgili açıklığa kavuşturmak için; kesinlikle süreçleri genelinde İstisnalar yakalamak olamaz. Bildiğim kadarıyla mesajlaşma, sadece PCNTL kütüphane kullanma gibi siz de sinyalleri ve çıkış kodlarını işlemek sınırlıdır.

Tam olarak ne yapıyorsun, bilmeden. Diğer çeşitli seçenekler var. Onlar muhtemelen ihtiyaçlarınızı karşılamak gibi ben, şu asenkron mesajlaşma çözümlerinden birini öneririm.

File based

Çocuğunuz süreçler ebeveyn tarafından boynuzsuz olacak bir dosyaya, mesaj yazabilirsiniz.

Memcache based

Yukarıdaki ile aynı, ancak iletişim aracı olarak memcached kullanarak.

Database based

Yukarıdaki ile aynı, ancak iletişim ortamı olarak bir db tablo kullanarak.

PHP's semaphore/IPC library

http://us3.php.net/manual/en/book.sem.php

Bu süreçler arasında iletişim kurmak için msg_send gibi yöntemler () ve msg_receive () kullanmanızı sağlar.

Ben bunlardan birini aradığınız çözümü sağlayacaktır eminim. Bu yöntemlerden herhangi birini kullanmak için nasıl özelliklerini içine gidiyor, ama bu sorunun kapsamı dışındadır muhtemelen, ama sen kullanmayı tercih hangisi yöntem ile yardıma ihtiyacınız varsa, yeni bir soru sormak için çekinmeyin.