İçeriğe geç

Waitpid Kullanımı

Bu komut  aktif olan proses içine yazılan prosesin, herhangi bir alt prosesin işlemini bitirmesi için beklemesidir. Sonlanmadığı taktirde program da sonlanmaz. Prosesin işlem yapmama, bekleme durumudur. İpliklerde pthread_join() ifadesi bu görevi görüyordu

Waitpid(pid, int durum, int seçenek); şeklinde kullanılır. Tek bir parametreyi tutar. Bu parametre adres bilgisini tutar. Beklenen proses sonlandığında, sonlanan bu prosesin çıkış değerini tutar. 3 şekilde kullanılabilir.

1. parametre : Beklenecek olan proses ID’si yazılır. Herhangi bir çocuk proses beklenecekse ilk parametreye “-1” değeri girilir.
2. parametre : Bu parametre adres tutar. Beklenen proses sonlandığında int *durum olarak belirttiğimiz ikinci parametre ifadesi, sonlanan bu prosesin çıkış değerini tutar.
3. parametre : Özellikler parametresidir. “0” veya bazı özel değerler alır. Sıfır haricinde 3 değer alır.

WNOHANG : Hiçbir çocuk proses sonlanmıyorsa hemen geri dönmeyi belirtir.
WUNTRACED : Çocuk proses durdurulduğunda geri dönülecektir.
WCONTINUED : Durdurulan çocuk proses SIGCONT sinyali aldığında geri döner.

#include<iostream>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
using namespace std;
int main()
{
	pid_t pid;
	cout<<"Proc id:"<<getpid()<<endl;
	pid=fork();

	if(pid==0) // cocuk	
	{
		cout<<"BEN COCUK, PROC ID:"<<getpid()<<endl;
		cout<<"COCUK: BEN UYUDUM"<<endl;
		sleep(20);
		cout<<"COCUK: BEN UYANDIM"<<endl;
		cout<<"COCUK: BEN SONLANDIM"<<endl;
	}
	else{
		if(pid>-1)
			cout<<"COCUK PID:"<<pid<<endl;
		else
			cout<<"COCUK OLUSMADI"<<endl;	 
		cout<<"ANNE PID:"<<getpid()<<endl;
		
		waitpid(pid,0,0);
		cout<<"ANNE: BEN SONLANDIM"<<endl;
	}
	return 0;
}
Çıktı :

Proc id:20326
COCUK PID:20328
ANNE PID:20326
BEN COCUK, PROC ID:20328
COCUK: BEN UYUDUM
COCUK: BEN UYANDIM
COCUK: BEN SONLANDIM
ANNE: BEN SONLANDIM
Kategori:AnasayfaC++İşletim Sistemleri

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

× Nasıl yardımcı olabilirim?