Nasıl aynı anda arka planlı PHP sürecinin PID ve çıkış yakalayabilir?

0 Cevap php

Ben exec kullanarak arka planda ikinci bir komut dosyasını başlatmak için olan bir PHP komut dosyası var. Ebeveyn komut dosyası, bu yeni sürecin PID yakalamak gerekiyor, ama ben de veritabanına kaydedilir böylece çocuk senaryonun olası çıkış yakalamak gerekiyor. Ben de ölümcül hatalar veya komut dosyası ile ilgili bir sorun olabileceğini gösterir herhangi bir şey yakalamak gerekiyor çünkü ben sadece veritabanına çocuk komut günlüğü olamaz. Ana süreç çocuğa kontrol ve bittiğinde görmek mümkün gerekiyor, çünkü PID kullanılır. Çocuk süreçler bazen Crons olarak çalışır, bu yüzden bölmek burada da bir seçenek değildir. Ben sorun varsa iki yürütme yolları ayıklamak istemiyorum.

Bu benim ilk çözüm oldu ve çıkış yakalayabilir, ancak doğru PıD'YI almak için başarısız olur.

// RedirectToLog.php just reads stdin and logs it to the databse.
$cmd="php child.php </dev/null 2>&1 | php RedirectToLog.php >/dev/null 2>&1 & echo $!";

Burada sorun, $ olduğunu! RedirectToLog.php yerine child.php olmak biter arka planda başladı son sürecin PID.

Benim diğer fikri bir FIFO dosyası (boru) kullanmaya teşebbüs oldu.

$cmd1="php RedirectToLog.php </tmp/myFIFO >/dev/null 2>&1 &"
$cmd2="php child.php </dev/null >/tmp/myFIFO 2>&1 & echo $!"

Biri kadar seviniyorlardı ben RedirectToLog güvenilir FIFO'yu tüketmek alamadım çünkü bu bir işe yaramadı ve yaptım, bazen child.php diğer bekleyen iki ucunu sol boru ve hem süreçlerine EOF yazmak için başarısız oldu öldürdü.

0 Cevap