2010-04-07 18 views
5

Pid'in SIGCHLD sinyalini gönderen bir işlem olduğunu anlamaya çalışıyorum ve bunu SIGCHLD için oluşturduğum bir sinyal işleyicisinde yapmak istiyorum. Bunu nasıl yapardım? Deniyorum: Çocuğumda ortaya çıkan herhangi bir süreç için beklemek istiyorum.Sonlandırılmış işlemin pidini belirleme

+0

Yaklaşımınız doğru, işe yaramalı. Sorunuz nedir? – qrdl

+0

SIGCHLD'yi gönderen sürecin pidini nasıl alabilirim? – Hristo

+2

'waitpid()', sinyal işleyicinizden çağırırsanız sonlandırılmış çocuğun pidini döndürür. – qrdl

cevap

7

waitpid() 'u daha fazla veya daha az gösterildiği gibi, sizden ölen çocuk süreçlerinden birinin PID'sini size söyleyeceksiniz - bu genellikle ölen tek süreç olacak, ama eğer onların bir telaşı varsa, toplamak için bir sinyal ve cesetler alabilirsin. Yani, kullanın: Eğer çocuğun çıkış durumu hakkında umurumda değil eğer NULL ile &status yerini alabilir

void sigchld_handler(int signum) 
{ 
    pid_t pid; 
    int status; 
    while ((pid = waitpid(-1, &status, WNOHANG)) != -1) 
    { 
     unregister_child(pid, status); // Or whatever you need to do with the PID 
    } 
} 

.

İlgili konular