wait
- C kursu
- İleri seviye
- Ders 9/83
- 5 dk
wait ve waitpid ile süreci beklemeyi öğrenirsin.
wait fonksiyonu
wait(&status), ebeveynin herhangi bir çocuğun bitmesini beklemesini sağlar. status değişkenine çocuğun çıkış durumu yazılır.
Çocuğun çıkış kodunu WEXITSTATUS(status) ile alırsın. Önce WIFEXITED(status) ile normal çıkışı denetle: true ise çocuk exit ile bitmiştir. WEXITSTATUS o zaman exit'e verilen değeri döndürür. Sinyalle çökmüşse WIFSIGNALED kullanırsın.
waitpid
waitpid(pid, &status, 0), belirli bir çocuğu bekler. pid ile hangi çocuğu bekleyeceğini belirtirsin; -1 verilirse herhangi biri.
Üçüncü parametre seçeneklerdir: 0 normal bekleme, WNOHANG ise beklemeden anında döner. wait(&status) aslında waitpid(-1, &status, 0)'ın kısayoludur. Birden çok çocuğun varsa waitpid ile hangisini beklediğini denetlersin.
Uygulama Çıkış kodunu yakala
pid_t pid = fork(); ile süreç oluştur. Çocukta exit(42);. Ebeveynde int status; wait(&status); ve printf("%d\n", WEXITSTATUS(status)); ile çıkış kodunu yazdır.
Başlangıç kodu
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
// fork yap, çocuk exit(42)
// ebeveynde wait
// WEXITSTATUS ile yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
int main(void) {
pid_t pid = fork();
if (pid == 0) {
exit(42);
}
int status;
wait(&status);
printf("%d\n", WEXITSTATUS(status));
return 0;
}Beklenen çıktı
42
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 wait çağrısı
int status;
wait(&____);
int status;
wait(&status);
Açıklama: wait, status değişkenine çıkış durumunu yazar.
2 wait makrolarını eşle
| Kavram | Anlamı |
|---|---|
wait |
Herhangi çocuğu |
waitpid |
Belirli çocuğu |
WIFEXITED |
Normal çıkış mı |
WEXITSTATUS |
Çıkış kodu |
3 WEXITSTATUS(status) ne döndürür?
- Çıkış kodunu Doğru cevap
- Sinyal numarasını
- PID'yi
- Bekleme süresini
Açıklama: WEXITSTATUS, exit'e verilen çıkış kodunu döndürür.