CodeBlanks Logo Icon CodeBlanks

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

main.c
#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

main.c
#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ı

Soru
int status;
wait(&____);
Cevap
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.

İleri seviye bölümündeki tüm dersler