Linux'ta wait ve waitpid arasındaki fark nedir?


cevap 1:

Bu sistem çağrıları Linux'a özgü değildir; anlambilimleri Unix'in herhangi bir uygulamasında aynı olmalıdır.

wait (), geçerli sürecin herhangi bir alt öğesinden çıkmak için "bekler" (veya sistem çağrısından önce çıkmış olan alt süreçler arasından rastgele bir durum elde eder). Buna bir süreç durumu yapısı yapılarak ve mutasyona uğratılacak / değiştirilecek olanın adresini sonuç olarak geçirerek çağrılır. En azından Linux altında bu, aslında belirli seçenekler ayarlanmış olan waitpid () etrafında bir sarıcıdır (kılavuz sayfalarına bakın: wait (2): işlemin durumun değişmesini bekleyin)

waitpid (), kişinin belirli bir PID'yi (işlem kimliği) beklemesine veya belirli işlemlerle (WNOHANG… gibi alt işlem durumunu kontrol etmesine ve "beklememesine" izin vermemek, ancak durumun değiştirilip değiştirilmediğini gösteren bir dönüş kodu ile hemen dönmesine izin verir … Rapor edilecek herhangi bir çıkış işlemi olup olmadığı, PID yerine beklemeden -1 argümanı geçirilmesi, genellikle WNOHANG bayrağıyla birlikte yapılan herhangi bir çocuğu beklemesine izin verecektir.

Ayrıca Linux kendi waitid () sistem çağrısını ekleyerek kişinin süreç grubuna veya hangi sinyallerin herhangi bir alt sürecin durumunu değiştirmiş olabileceğine dayalı olarak süreçleri beklemesine izin verir.

Wait () sistem çağrısı için daha genel (Linux'a özgü olmayan) bir kılavuz: C'de Sistem Çağrısı Bekle - GeeksforGeeks

Bildiğim kadarıyla sadece kendi alt süreçlerinizde beklemek () mümkündür. Doğrudan çocuklarınızdan biri olmayan bir PID ile waitpid () çağırırsanız -EINVAL (geçersiz) dönüş değeri alacağınızdan emin olabilirsiniz. Ayrıca wait () ve bunun ana kod yürütme yolunuzdaki değişkenlerinin SIGCHLD kullanımı için kaydettiğiniz tüm işleyiciler tarafından karmaşık olabileceğini unutmayın.

Ayrıca SIG_IGN olarak ayarlanmış SIGCHLD altında bulunan bir işlem çatalı () üzerinde waitpid () çağrısının semantiği, Linux 2.4 ve 2.6 arasında Posix belirtimi ile birlikte karmaşık ve değiştirilmiştir. Çirkin ayrıntılar için kılavuz sayfasını okuyun ve beklentilerinizin gereksinim anlamınıza uygun olduğundan emin olmak için test kodu yazın.