Örneklerle C'de getpid işlevini çağırma

Calling Getpid Function C With Examples



Getpid(), bu işlevi çağıran işlemin işlem kimliğini almak için kullanılan işlevdir. İlk işlemin PID'si 1'dir ve ardından her yeni işleme yeni bir kimlik atanır. PID'yi almak için basit bir yaklaşımdır. Bu işlev yalnızca benzersiz işlem kimliklerini almanıza yardımcı olur.

Kimlik almada kullanılan işlevler

Burada iki tür kimlik mevcuttur. Biri, süreç PID'sinin geçerli kimliğidir. Diğeri ise ana süreç PPID'nin kimliğidir. Bu işlevlerin her ikisi de kitaplıkta tanımlanan yerleşik işlevlerdir. Bu kitaplığı kullanmadan kodu çalıştırırken bir hataya neden olabilir ve yürütmeyi durdurabilir.







C'de getpid() işlevi

Bir süreç oluşturulduğunda ve çalıştığında, ona benzersiz bir kimlik atanır. Bu işlem kimliğidir. Bu işlev, şu anda çağrılan işlemin kimliğini döndürmeye yardımcı olur.



C'de getppid() işlevi

Bu kimlik, ana işlemin/fonksiyonun sürecini döndürmek için kullanışlıdır.



örnek 1
C dilinde süreçteki PID örneğini anlamak. İki araca ihtiyacınız var: herhangi bir metin düzenleyici ve üzerinde komutları çalıştırmanız gereken Linux terminali. Herhangi bir metin düzenleyicide bir dosya oluşturun. Kod C dilinde yazıldığı için code1.c dosya adı oluşturduk, bu nedenle .c uzantısıyla kaydedilmelidir.





Tek bir kütüphane ekledik. Sonra burada ana program başlar. Ana programda, yerleşik işlevi getpid(); mevcut işlemin kimliğini almak için. Ve bir değişken tanıtılır ve atanır. PID() fonksiyonunun değeri bu değişkende saklansın diye bu değişkeni kullanarak değerin çıktısını alacağız.



Şimdi bu dosyanın içeriğini Linux terminalinde çalıştırmak istiyoruz. Kod ön koşulu, önce derlenecek ve ardından yürütülecektir. Derleme için GCC kullanılır. Sisteminizde GCC yoksa, önce Sudo komutunu kullanarak onu yüklemeniz gerekir.

Şimdi yazılan kodu derleyin. Bu, aşağıdaki ekli komut kullanılarak gerçekleştirilebilir.

$ GCC –o kod1 kod1.c

Oysa –o, komuttaki kaydetme dosyasını açmak için kullanılır. Sonra –o'dan sonra dosya adını yazıyoruz.

Derlemeden sonra komutu çalıştırın.

$ ./kod1

Yukarıdaki görüntü, işlevin işlem kimliğini gösterir.

Örnek 2
Önceki örnekte, PID'yi kullanıyoruz. Ancak bu örnekte hem PID hem de PPID kullanılmıştır. Bu işlevin kaynak kodu, öncekiyle hemen hemen aynıdır. Sadece bir kimliğin başka bir ilavesi var.

Ana programda işlem kimlikleri tarafından atanan iki değişken içeren bir dosya düşünün. Biri mevcut süreçten, diğeri ise ana süreçten. Ardından, ilk örneğe benzer şekilde, her iki kimliği de değişkenleri aracılığıyla yazdırın.

Int pid_t =getpid();
Int ppid_t =getppid();

Bu ikisi, tüm kodun ana işlevleridir. Şimdi, dosya oluşturulduktan sonraki adım, dosyayı derlemek ve çalıştırmaktır. Komutta GCC kullanarak derleyin. Derlemeden sonra Ubuntu terminalinde çalıştırın.

$ GCC –o kod1 kod1.c
$ ./kod1

Çıktı, önce işlem kimliğinin görüntülendiğini ve ardından üst işlem kimliğinin görüntülendiğini gösterir.

Örnek 3
Tüm süreçler paralel olarak çalışır ve yürütülür. Ebeveyn ve alt süreçler, kalan tüm satırları toplu olarak yürütür. Her ikisi de aynı anda sonuç verir. Ancak C kodunda çatal kullanarak bu fonksiyon 0'dan küçük bir değer döndürürse fonksiyon çağrısı sonlandırılır.

İlgili başlıkta iki kitaplığa sahip yeni bir dosya düşünün. Burada if-else ifadesini kullandığımız bir koşul kullanılır. Ana programda fork değeri –ive değerindeyse, process id'sinin başarısız olduğuna ve alınmayacağına dair bir mesaj gösterileceği belirtilir. Durum yanlışsa, derleyici koşulun diğer kısmına geçecektir. Bu kısımda işlem kimliği elde edilir, ardından bu işlem kimliğini görüntüleyeceğiz ve işlem kimliğinin alındığını belirten bir mesaj görüntüleyeceğiz. Burada kaynak kodun if-else ifadesini alıntılayacağız.

Şimdi tekrar kodu derleyin ve çalıştırın.

./kod2

Çıktı, else bölümünün yürütüldüğünü gösterir ve işlem kimliğini yazdırır ve ardından bir PID mesajı görüntüler.

Örnek 4

Bu, aynı kavramı açıklamanın başka bir örneğidir. Fork() işlevi iki farklı değer döndürür. Bir alt süreç olması durumunda, döndürülecek olan değer 0'dır. Aynı zamanda, ana süreç durumundaki değer, yeni çocuğun süreç kimliğidir.

Bu örnekte, aynı if_else koşulu kullanılmıştır. Ancak burada iki koşul uygulanmaktadır. Sıfırdan küçük olan PID ile diğerinin sıfıra eşit olduğu karşılaştırma. PID sıfırdan küçükse bir hata mesajı gösterecektir. Oysa PID sıfıra eşitse, bunun bir alt süreç olduğu anlamına gelir ve diğer kısmı, PID'nin sıfırdan büyük olması durumunda bir üst süreç olduğunu gösterir.

Şimdi kodu derleyin ve çalıştırın.

$ gcc –o kod3 kod3.c
$./kod3

Çıktıdan, önce else bölümünün yazdırıldığını görebiliriz, işlem kimliğinin 0'dan büyük olduğu anlamına gelir.

Örnek 5
Pekala, bu, bu fonksiyonun çalışmasını açıklamak için yukarıda açıklanan tüm kodları özetlemeye çalıştığımız son örnektir. getpid() fonksiyonlarını kullanmak için fork() fonksiyonları ile döngüleri de kullanabiliriz. Birçok alt süreç oluşturmak için döngüleri kullanabiliriz. Burada döngüde 3 değerini kullanmamız gerekiyor.

Yine koddaki koşullu ifadeyi kullanmamız gerekiyor. for döngüsü birinden başlar ve 3'e kadar yinelenirrddönüş.

Şimdi dosyayı kaydedin ve çalıştırın. Kodu yalnızca tek bir komutta derlemek ve yürütmek için başka bir basit yöntem daha vardır. Yani.

$ GCC kodları5.c –o s & ./code5

Şimdi kodun çıktısına doğru ilerliyoruz. Ana sürecin kimliği, tüm alt süreçlerde aynıdır. Bu, tüm bu süreçlerin bir ebeveyne ait olduğu anlamına gelir. Döngü 3 ile sınırlı olduğu için bu işlemler arka arkaya yürütülür. Sadece 3 iterasyon yapılacaktır.

Çözüm

Bu makale, temel bilgileri ve Linux komutlarında bir getPID() işlevinin çalışmasını içerir. Benzersiz kimlik, bu işlev aracılığıyla her işleme atanır.