#include <iostream>
#include <pthread.h>
using namespace std;
void *iplik_islemi(){
Cout<<"Iplik"<<endl;
}
int main() {
pthread_t iplik;
pthread_create(&iplik,NULL,iplik_islemi,NULL);
cout<<"İpliğin sonlanmasını bekle"<<endl;
pthread_join(iplik,NULL);
cout<<"İplik Sonlandı";
}
wait( ) Sistem Çağrısı İle Çocuk Prosesi Bekleme (C++,İSLETİM SİSTEMLERİ)
#include <iostream>
#include <sys/types.h>
#include <sys/wait.h>
using namespace std;
int main( ){
pid_t pid;
int statu; //Çocuk prosesin sonlanma değeri
pid= fork( );
if(pid==0)
cout<<"Ben Cocuk Proses"<<endl;
else
{
cout<<"Ben Anne Proses Bekledim..."<<endl;
wait(&statu);
}
}
#include <sys/types.h>
#include <sys/wait.h>
using namespace std;
int main( ){
pid_t pid;
int statu; //Çocuk prosesin sonlanma değeri
pid= fork( );
if(pid==0)
cout<<"Ben Cocuk Proses"<<endl;
else
{
cout<<"Ben Anne Proses Bekledim..."<<endl;
wait(&statu);
}
}
clone( ) Çağrısı İle Yeni Proses Oluşturma (C++,İSLETİM SİSTEMLERİ,LİNUX)
#include <sched.h>
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#define STACK_SIZE 1024
int new_process (){
cout<<"My new process..."<<endl;
return 1;
}
int main( )
{
int pid;
void *stack; //Cocuk prosesin yığın işaretçisi
stack=malloc(STACK_SIZE); //Bellek alanı alma
if(stack==0){
cout<<"Bellek tahsis hatasi"<<endl;
exit(1);
}
pid=clone(&new_process,(char*) stack+STACK_SIZE,0,0);//clone-->>İle yeni proses oluşturuldu...
pid=waitpid(pid,NULL,0);//Wait a child process
cout<<"CHILD PROCESS ENDED..."<<endl;
free(stack); //Belleği Bırak
}
fork( ) Sistem Çağrısı ve Yeni İplik Oluşturma Çağrısı(C++,İŞLETİM SİSTEMLERİ)
#include <iostream>
#include <sys/types.h>
#include <unistd.h>
using namespace std;
int main(){
pid_t pid;
pid=fork();
if(pid==0)
cout<<"Merhaba ben cocuk proses"<<endl;
else
cout<<"Merhaba ben anne proses";
}
//Şimdide yukarıda oluşturduğumuz prosese bir iplik ekleyelim
#include <iostream>
#include <pthread.h>
using namespace std;
void *iplik_islemleri(void *i)
{
cout<<"İplik çalışmaya başladı..."<<i<<endl;
}
int main(){
//İplik bilgilerini saklamak için pthread_t tipinde bir değişken
pthread_t iplik;
int iplik_no,i=1;
iplik_no=pthread_create(&iplik,NULL,iplik_islemleri,(void*)i);
//iplik oluşturuldu...
//ipliğin sonlanmasını bekliyoruz...
pthread_join(iplik,NULL);
}
SQL DİSTİNCT KOMUTU
DİSTİNCT KOMUTUMUZ TEKRARLI KAYITLARIMIZIN GÖSTERİLMEMESİNİ SAĞLIYOR.
ÖRNEĞİN VERİ TABLOMUZDA AHMET ADINDAN YÜZLERCE KİŞİ VAR VE BİZ SADECE
BİR TANESİNİN GÖSTERİLMESİNİ İSTİYORUZ O ZAMAN DİSTİNCT KOMUTUNU
KULLANMAMIZ GEREKECEKTİR.
ÖRNEĞİN VERİ TABLOMUZDA AHMET ADINDAN YÜZLERCE KİŞİ VAR VE BİZ SADECE
BİR TANESİNİN GÖSTERİLMESİNİ İSTİYORUZ O ZAMAN DİSTİNCT KOMUTUNU
KULLANMAMIZ GEREKECEKTİR.
SQL DELETE (SİLME) KOMUTU
SİSTEM ÇAĞRILARI PROSES VE İPLİK YÖNETİM ÇAĞRILARI -4-
4-YÜRÜTME ÇAĞRILARI
Yürütme işlemleri exec() grubu çağrıları ile gerçekleşir.<unistd> kütüphanesi gerekir.
ÖRNEK
execl() sistem çağrısını kullanarak aynı dizideki kodu verilen merhaba.cpp programının çalıştırılabilir hali olan merhaba isimli dosyayı çalıştıracak kod parçasını yazalım.
#include <iostream>
using namespace std;
int main()
{
cout<<"Merhaba..."<<endl;
}
#include <iostream>
#include <unistd.h>
using namespace std;
int main()
{
execl("merhaba","meraba",NULL);
}
5-KONTROL GRUBU ÇAĞRILARI
brk(void *veri_bolum_bitisi) ve setsid() çağrıları prosesler için özellik ayarlama çağrılarıdır.(<unistd.h>)
Proseslerin bellekleri 3 kısımdan oluşur.Bunlar işlemcinin temel bellek kesimleriyle aynı mantıkta bölümlü bir yapıdadır.
İlk kısım ---Program kodunun olduğu kod kesimi
İkinci kısım---Verilerin ve değişkenlerin yer aldığı veri kesimi
Üçüncü kısım---Yığının yer aldığı yığın kesimidir.
*******************************************************************************
ÖRNEK
setsid() sistem çağrısını kullanarak kendi SID sini belirleyen bir çocuk prosesin C++ kodunu yazalım.
#include <iostream>
#include <unistd.h>
int main (int argc,const char *argc[])
{
pid_t pid,sid;
pid=fork(); //Forklayarak ana prosesten ayrılıyoruz.
if(pid>0)
{
cout<<"Ana proses çıkar..."<<endl;
return 0; //ana prosesi sonlandırdık
}
sid=setsid(); //Kendi SID imizi oluşturup yetim proses olmaktan kurtuluyoruz.
sleep(5);
cout<<"BITIS..."<<endl;
return 0;
}
Yürütme işlemleri exec() grubu çağrıları ile gerçekleşir.<unistd> kütüphanesi gerekir.
ÖRNEK
execl() sistem çağrısını kullanarak aynı dizideki kodu verilen merhaba.cpp programının çalıştırılabilir hali olan merhaba isimli dosyayı çalıştıracak kod parçasını yazalım.
#include <iostream>
using namespace std;
int main()
{
cout<<"Merhaba..."<<endl;
}
#include <iostream>
#include <unistd.h>
using namespace std;
int main()
{
execl("merhaba","meraba",NULL);
}
5-KONTROL GRUBU ÇAĞRILARI
brk(void *veri_bolum_bitisi) ve setsid() çağrıları prosesler için özellik ayarlama çağrılarıdır.(<unistd.h>)
Proseslerin bellekleri 3 kısımdan oluşur.Bunlar işlemcinin temel bellek kesimleriyle aynı mantıkta bölümlü bir yapıdadır.
İlk kısım ---Program kodunun olduğu kod kesimi
İkinci kısım---Verilerin ve değişkenlerin yer aldığı veri kesimi
Üçüncü kısım---Yığının yer aldığı yığın kesimidir.
*******************************************************************************
ÖRNEK
setsid() sistem çağrısını kullanarak kendi SID sini belirleyen bir çocuk prosesin C++ kodunu yazalım.
#include <iostream>
#include <unistd.h>
int main (int argc,const char *argc[])
{
pid_t pid,sid;
pid=fork(); //Forklayarak ana prosesten ayrılıyoruz.
if(pid>0)
{
cout<<"Ana proses çıkar..."<<endl;
return 0; //ana prosesi sonlandırdık
}
sid=setsid(); //Kendi SID imizi oluşturup yetim proses olmaktan kurtuluyoruz.
sleep(5);
cout<<"BITIS..."<<endl;
return 0;
}
SİSTEM ÇAĞRILARI PROSES VE İPLİK YÖNETİM ÇAĞRILARI -3-
exit(int statu) sistem çağrısı çalışan bir prosesin bitiminde kullanılır.Kütüphanesi <stdlib.h> tır.
Çıkış durumunu gösteren statu parametresi aynı zamanda waitpid() sistem çağrısına parametre olarak döner.
statu parametresinin düşük değerlikli baytı 0 ise normal sonlanma 0 dan farklı bir değer ise hata ile sonlanma anlamına gelir.Yüksek değerlikli ise çocuk prosesin çıkış durumudur.
ÖRNEK
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
cout<<"CALISAN PRO..."<<endl;
exıt(EXIT_SUCCESS);
cout<<"Bu kod çalışmadı...";
}
pthread_join(pthread_t iplik,void **deger) çağrısı ,ilk parametrede belirtilen ipliğin sonlanmasını beklemek için kullanılmaktadır.<pthread.h> başlık dosyasında tanımlıdır.
ÖRNEK
#include <iostream>
#include <pthread.h>
using namespace std;
void *iplikislemi(){
cout<<"IPLIK"<<endl;
}
int main()
{
pthread_t iplik;
pthread_create(&iplik,NULL,iplikislemi,NULL);
cout<<"ipliğin sonlanmasın bekle !!! "<<endl;
cout<<"Iplik sonlandı..."<<endl;
}
pthread_exit(void *ptr) ise ipliğin sonlandırma çağrısıdır.,<pthread.h> başlık dosyasında tanımlıdr.
ÖRNEK :
Bir iplik oluşturup bu ipliğin pthread_exit() sistem çağrısıyla sonlandığı iplik ve ana program kodlarını yazalım.
#include <pthread.h>
#include<iostream>
using namespace std;
void *iplik_islem()
{
cout<<"Iplik islemi"<<endl;
pthread_exit(0);
}
int main()
{
pthread_t iplik;
pthread_create(&iplik,NULL,iplik_islemi,NULL);
pthread_join(iplik,NULL);
}
Çıkış durumunu gösteren statu parametresi aynı zamanda waitpid() sistem çağrısına parametre olarak döner.
statu parametresinin düşük değerlikli baytı 0 ise normal sonlanma 0 dan farklı bir değer ise hata ile sonlanma anlamına gelir.Yüksek değerlikli ise çocuk prosesin çıkış durumudur.
ÖRNEK
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
cout<<"CALISAN PRO..."<<endl;
exıt(EXIT_SUCCESS);
cout<<"Bu kod çalışmadı...";
}
pthread_join(pthread_t iplik,void **deger) çağrısı ,ilk parametrede belirtilen ipliğin sonlanmasını beklemek için kullanılmaktadır.<pthread.h> başlık dosyasında tanımlıdır.
ÖRNEK
#include <iostream>
#include <pthread.h>
using namespace std;
void *iplikislemi(){
cout<<"IPLIK"<<endl;
}
int main()
{
pthread_t iplik;
pthread_create(&iplik,NULL,iplikislemi,NULL);
cout<<"ipliğin sonlanmasın bekle !!! "<<endl;
cout<<"Iplik sonlandı..."<<endl;
}
pthread_exit(void *ptr) ise ipliğin sonlandırma çağrısıdır.,<pthread.h> başlık dosyasında tanımlıdr.
ÖRNEK :
Bir iplik oluşturup bu ipliğin pthread_exit() sistem çağrısıyla sonlandığı iplik ve ana program kodlarını yazalım.
#include <pthread.h>
#include<iostream>
using namespace std;
void *iplik_islem()
{
cout<<"Iplik islemi"<<endl;
pthread_exit(0);
}
int main()
{
pthread_t iplik;
pthread_create(&iplik,NULL,iplik_islemi,NULL);
pthread_join(iplik,NULL);
}
SİSTEM ÇAĞRILARI PROSES VE İPLİK YÖNETİM ÇAĞRILARI -2-
3-BEKLEME VE SONLANMA ÇAĞRILARI
Proseslerin bekleme ve sonlanma çağrıları : wait(),waitpid() ve exit() tir
İpliklerde ise pthread_join ve pthread_exit kullanılır.
wait(int *statu) ve waitpid(pid_t pid,int *statu,int secenekler) çağrıları için <sys/types.h> ve <sys/wait.h> kütüphaneleri gerekiyor.
waitpid() çağrısı kullanılarak istenen bir çocuk prosese özel veya çok çocuklu bir yapı için herhangi bir çocuk prosesin bitişi beklenebilir.
Eğer özel bir proses beklenecekse o prosesin proses tanımlayıcı numarası(pid) ilk parametre olarak girilir.Herhangi bir çocuk prosesin sonlanması beklenecekse -1 değeri girilir.
Proses sonlandığında waitpid() in ikinci parametresi olan ve adres değeri alan statü değişkeni sonlanan çocuk prosesin çıkış değerini alır.
waitpid() çağrısının son parametresi olan özellikler ise 0 veya OR larla değerler alabilir.
WNOHAN,WUNTRACED,WCONTINUED...
ÖRNEK
Bir anne ve çocuk proses oluşturup anne prosesin çocuk prosesin sonlanmasını wait çağrısı ile beklediği programı yazalım.
#include <iostream>
#include <sys/types.h>
#include <sys/wait.h>
using namespace std;
int main()
{
pid_t pid; //Fork çağrımızda geri dönüş değeri için
int statu; //Çocuk prosesin sonlanma değerinin alınması için
pid=fork(); //Çocuk prosesi oluşturduk.
if(pid==0)
cout<<"Merhaba la ben çocuk proses nasılsın"<<endl;
else{
cout<<"Selam ben anne proses"<<endl;
wait(&statu); //Prosesin bitmesini bekliyoruz.
}
}
ÖRNEK 2
Bir anne ve çocuk proses oluşturup anne prosesin çocuk prosesin çocuk prosesin sonlanmasını waitpid() çağrısı ile beklediği programı yazalım
#include <iostream>
#include <sys/types.h>
#include <sys/wait.h>
using namespace std;
int main()
{
pid_t pid , pid_w ; //fork() ve waitpid() çağrıları için
int statu;
pid=fork();
if(pid==0)
cout<<"Ben Çocuk..."<<getpid()<<endl;
else
{
cout<<"Ben anne proses , çocuğumu beklicem tmm mı"<<endl;
pid_w=waitpid(pid,&statu,0);
//Çocuğun sonlanmasını bekliyor
cout<<"Sonlanan..."<<pid_w<<endl; //Sonlanan prosesin PID si yazdırılıyor
}
}
Proseslerin bekleme ve sonlanma çağrıları : wait(),waitpid() ve exit() tir
İpliklerde ise pthread_join ve pthread_exit kullanılır.
wait(int *statu) ve waitpid(pid_t pid,int *statu,int secenekler) çağrıları için <sys/types.h> ve <sys/wait.h> kütüphaneleri gerekiyor.
waitpid() çağrısı kullanılarak istenen bir çocuk prosese özel veya çok çocuklu bir yapı için herhangi bir çocuk prosesin bitişi beklenebilir.
Eğer özel bir proses beklenecekse o prosesin proses tanımlayıcı numarası(pid) ilk parametre olarak girilir.Herhangi bir çocuk prosesin sonlanması beklenecekse -1 değeri girilir.
Proses sonlandığında waitpid() in ikinci parametresi olan ve adres değeri alan statü değişkeni sonlanan çocuk prosesin çıkış değerini alır.
waitpid() çağrısının son parametresi olan özellikler ise 0 veya OR larla değerler alabilir.
WNOHAN,WUNTRACED,WCONTINUED...
ÖRNEK
Bir anne ve çocuk proses oluşturup anne prosesin çocuk prosesin sonlanmasını wait çağrısı ile beklediği programı yazalım.
#include <iostream>
#include <sys/types.h>
#include <sys/wait.h>
using namespace std;
int main()
{
pid_t pid; //Fork çağrımızda geri dönüş değeri için
int statu; //Çocuk prosesin sonlanma değerinin alınması için
pid=fork(); //Çocuk prosesi oluşturduk.
if(pid==0)
cout<<"Merhaba la ben çocuk proses nasılsın"<<endl;
else{
cout<<"Selam ben anne proses"<<endl;
wait(&statu); //Prosesin bitmesini bekliyoruz.
}
}
ÖRNEK 2
Bir anne ve çocuk proses oluşturup anne prosesin çocuk prosesin çocuk prosesin sonlanmasını waitpid() çağrısı ile beklediği programı yazalım
#include <iostream>
#include <sys/types.h>
#include <sys/wait.h>
using namespace std;
int main()
{
pid_t pid , pid_w ; //fork() ve waitpid() çağrıları için
int statu;
pid=fork();
if(pid==0)
cout<<"Ben Çocuk..."<<getpid()<<endl;
else
{
cout<<"Ben anne proses , çocuğumu beklicem tmm mı"<<endl;
pid_w=waitpid(pid,&statu,0);
//Çocuğun sonlanmasını bekliyor
cout<<"Sonlanan..."<<pid_w<<endl; //Sonlanan prosesin PID si yazdırılıyor
}
}
PROCESSLER İLE THREADLER ARASINDAKİ FARKLAR
1-Threadler, onu oluşturan işlemin adres alanını paylaşır; processler kendi adres alanlarına sahiptir.
2-Threadler, işlemin veri bölümüne doğrudan erişime sahiptir; Processler üst işlemin veri bölümünün kendi kopyaları vardır.
3-Threadler, süreçlerinin diğer konuları ile doğrudan iletişim kurabilir; Processler kardeş süreçlerle
iletişim kurmak için süreçlerarası iletişim kullanmalıdır.
4-Threadler neredeyse hiç yük taşımıyor; Processler hatırı sayılır bir yükü var.
5-Threadler kolayca oluşturulur; Yeni süreçler üst Processin çoğaltılmasını gerektirir.
6-Threadler, aynı işlemdeki iş parçacıkları üzerinde önemli denetime sahip olabilir; Processler yalnızca çocuk süreçleri üzerinde kontrol sahibi olabilirler.
7-Ana threadler değişiklikler (iptal, öncelik değişikliği, vb.) Işlemin diğer threadlerinin davranışını etkileyebilir; Üst processteki değişiklikler alt processleri etkilemez.
http://stackoverflow.com/questions/200469/what-is-the-difference-between-a-process-and-a-thread Sitesinden çevrilmiştir
http://stackoverflow.com/questions/200469/what-is-the-difference-between-a-process-and-a-thread Sitesinden çevrilmiştir
Kaydol:
Kayıtlar (Atom)
Spring Boot Uygulamasını Heroku üzerinde Deploy Etme
Bu yazımızda sizlere spring boot ile yazılmış basit bir Rest api'nin heroku üzerinde nasıl deploy edebileceğimizi göstereceğim. Önce ...
-
Bu yazımda hobi olarak ilgilendiğim bug bounty'i anlatmaya çalışacağım. Daha sonra bu konu üzerinde kendimizi geliştirmek için neler yap...
-
Flip-Flop doğruluk tabloları girişlerin durumuna bağlı olarak çıkışların ne olması gerektiğini anlatan tablolardır. Kısaca bir doğruluk tabl...