Provided by: manpages-tr_2.0.6-2_all bug

İSİM

       system - kabuk komutu çalıştırır

BİLDİRİM

       #include <stdlib.h>

       int system (const char *command);

AÇIKLAMA

       system()  kütüphane  işlevi,  aşağıdaki gibi exec(3) kullanarak belirtilen kabuk komutunu yürüten bir alt
       süreç oluşturmak için fork(2) çağrısını kullanır:

           execl("/bin/sh", "sh", "-c", komut, (char *) NULL);

       Komut tamamlanınca system() işlevi döner.

       Komutun yürütülmesi sırasında system() çağrısının yapıldığı süreçte SIGCHLD engellenir, SIGINT ve SIGQUIT
       yok sayılır. (Bu sinyaller, komutu yürüten alt süreç içindeki öntanımlılarına göre işlenir.)

       command NULL ise system(), sistemde bir kabuğun mevcut olup olmadığını gösteren bir durum döndürür.

DÖNÜŞ DEĞERİ

       system() işlevinin dönüş değeri şunlardan biridir:

        •  command NULL ise, kullanılabilir bir kabuk varsa sıfırdan farklı bir değer, yoksa 0 döner.

        •  Bir alt süreç oluşturulamıyorsa veya durumu alınamıyorsa -1 döner  ve  hata  kodu  errno  değişkenine
           atanır.

        •  Alt süreçte bir kabuk yürütülemezse, alt kabuk 127 durum koduyla çağrılan _exit(2) ile sonlandırılmış
           gibi bir durum koduyla (durum & 0xFF) döner.

        •  Tüm  system()  çağrıları  başarılı  olursa  dönüş değeri komutu çalıştıran alt kabuğun sonlanma durum
           kodudur. (Kabuğun sonlanma durum kodu, çalıştırdığı son komutun sonlanma durum kodudur.)

       Son iki durumda dönüş değeri, waitpid(2) sayfasında açıklanan makrolar (WIFEXITED(),  WEXITSTATUS()  vb.)
       kullanılarak incelenebilen bir "bekleme durumu" kodudur.

       system() herhangi bir başka alt sürecin bekleme durumunu etkilemez.

HATALAR

       system() fork(2) ile aynı hatalardan herhangi biriyle başarısız olabilir.

ÖZNİTELİKLER

       Bu bölümde kulllanılan terimlerin açıklamaları attributes(7) sayfasında bulunabilir.

       İşlev  Öznitelik      Değer
       system Evre Güvenliği ÇEG-evet

UYUMLULUK

       POSIX.1-2001, POSIX.1-2008, C89, C99.

EK BİLGİLER

       system()  basitlik  ve kolaylık sağlar: fork(2), execl(3) ve waitpid(2) çağrılarının tüm ayrıntılarını ve
       ayrıca gerekli sinyal yönlendirimlerini ele alır; ek olarak, kabuk komut için  olağan  ikameleri  ve  G/Ç
       yönlendirmelerini  gerçekleştirir.  system()  işlevinin  ana  maliyeti  verimsizliktir: kabuğu çalıştıran
       süreci oluşturmak ve kabuğu çalıştırmak için ek sistem çağrıları gerekir.

       _XOPEN_SOURCE özellik sınama makrosu tanımlanırsa (herhangi bir başlık  dosyası  dahil  edilmeden  önce),
       waitpid(2)  içinde  açıklanan  makrolar (WEXITSTATUS(), vb.), <stdlib.h> dahil edildiğinde kullanılabilir
       hale gelir.

       Bahsedildiği gibi; system(), SIGINT ve SIGQUIT sinyalini yoksayar. Bu, uygulamaların  kendi  çocuklarının
       çıkış durumlarını kontrol etmedikleri takdirde aşağıdaki örnekteki gibi durdurulamaz bir döngüden sürekli
       çağrılan uygulamalara sebep olabilir.

           while (birsey) {
           int donen = system("foo");

           if (WIFSIGNALED(donen) &&
               (WTERMSIG(donen) == SIGINT || WTERMSIG(donen) == SIGQUIT))
                   break;
           }

       POSIX.1’e  göre,  system()  işlevinin  yürütülmesi  sırasında  pthread_atfork(3)  kullanılarak kaydedilen
       işleyicilerin çağrılıp çağrılmayacağı konusu belirlenmemiştir. glibc gerçekleniminde bu  tür  işleyiciler
       çağrılmamaktadır.

       command  NULL  ise  /bin/sh’nin  kullanılabilirliğinin  sınanması  2.1.3’ten  önceki  glibc  sürümlerinde
       gerçekleştirilmezdi; bunun yerine her zaman kullanılabilir olduğu varsayılırdı ve system() bu durumda her
       zaman 1 döndürürdü. POSIX.1-2001 bir kabuk sağlamak  için  uyumlu  bir  uygulama  gerektirmesine  rağmen,
       çağıran   uygulama  daha  önce  chroot(2)  çağrısı  yapmışsa,  kabuk  kullanılabilir  veya  yürütülebilir
       olmayabileceğinden (POSIX.1-2001 tarafından bu durum belirtilmese de) Glibc 2.1.3’ten bu yana  bu  sınama
       yapılmaktadır.

       Alt süreçte bir kabuğun yürütülemediği durumdan ayırt edilemeyecek şekilde, system() işlevinden dönen 127
       değeri nedeniyle kabuk komutunun 127 durum koduyla sona ermiş gibi görünmesi mümkündür.

   Yetersizlikler
       Ayrıcalıklı  bir  uygulama  (kullanıcı ve grup kimliklerini değiştirebilen bir uygulama) içinden system()
       işlevini kullanmayın, çünkü sistem bütünlüğünü bozmak  için  bazı  ortam  değişkenlerine  tuhaf  değerler
       atanabilir.  Örneğin,  PATH,  keyfi bir uygulamanın ayrıcalıklı yürütülmesi için tahrif edilebilir. Bunun
       yerine exec(3) işlev  ailesini  kullanın,  ancak  execlp(3)  veya  execvp(3)  işlevini  kullanmayın  (bir
       yürütülebilir dosyayı aramak için PATH ortam değişkenini de kullanır).

       bash  sürüm  2  başlatıldığında  bir güvenlik önlemi olarak ayrıcalıkları düşürdüğünden, /bin/sh’nin bash
       sürüm 2 olduğu sistemlerde system() işlevi kullanıcı ve grup kimliklerini  değiştirebilen  uygulamalardan
       çağrıldığında düzgün çalışmayacaktır. (Debian, sh olarak çağrıldığında bunu yapmayan, dash(1) adlı farklı
       bir kabuk kullanır.)

       Komutun  bir parçası olarak kullanılan herhangi bir kullanıcı girişi, beklenmeyen kabuk komutlarının veya
       komut seçeneklerinin yürütülmemesini sağlamak için dikkatlice temizlenmelidir. system()  ayrıcalıklı  bir
       uygulamadan kullanıldığında bu tür riskler özellikle ciddidir

İLGİLİ BELGELER

       sh(1), execv(2), fork(2), sigaction(2), sigprocmask(2), wait(2), exec(3), signal(7)

ÇEVİREN

       © 2003 Yalçın Kolukısa
       © 2022 Nilgün Belma Bugüner
       Bu çeviri özgür yazılımdır: Yasaların izin verdiği ölçüde HİÇBİR GARANTİ YOKTUR.
       Lütfen,  çeviri  ile ilgili bildirimde bulunmak veya çeviri yapmak için https://github.com/TLBP/manpages-
       tr/issues adresinde "New Issue" düğmesine tıklayıp yeni bir konu açınız ve isteğinizi belirtiniz.

Linux man-pages 5.10                               6 Mart 2019                                         SYSTEM(3)