Bir dizi yerleşik işlevin (buit-in functions) yürütülmesini ve diğer proseslerin çalıştırılmasını sağlayan temel bir robust kabuk(shell).
MAX 80 Karakter ve 10 Argüman ile çalışmaktadır.
Distro | Shell | Built-in cd | Built-in exit | Built-in showpid |
---|---|---|---|---|
Fedora | ||||
Ubuntu | ||||
Pop!_OS | ||||
Kali | ||||
Mint |
Şube | Öğrenci No | Ad Soyad |
---|---|---|
1C | B181210036 | Mert Şenyıldız |
1B | B181210089 | Fatih Abidin Silan |
1C | B181210060 | Yasin Ağa |
1B | G191210401 | Aslı Sakarya |
1C | B181210075 | Abdulvahit Müjdat Camlı |
- bin : Derlenmiş Programın bulunduğu dizin
- bash : Kabuk çalıştırabilir dosya
- include : Library headerları'nın bulunduğu dizin
- bash.h : Kabuk library header dosyası
- lib : Derlenmiş library nesnelerinin bulunduğu dizin
- bash.o : Kabuk derlenmiş library dosyası
- src : Kaynak kodlarının bulunduğu dizin
- makefile : Proje makefile
Proje, derleyici olarak gcc kullanmaktadır.
- MAKEFILE kullanarak derleme
make
- Alternatif yöntem
gcc -I ./include -c ./src/bash.c -o ./lib/bash.o
gcc -I ./include -o ./bin/bash -s ./src/program.c ./lib/bash.o
Kabuk başarılı bir şekilde derlendikten sonra
./bin/bash
Built-in showpid fonksiyonunun zombi process bırakmakdan gerçeklenmesi proje'nin geliştirilmesi sırasında karşılaşılan en büyük zorluktu.
Problem:
Kabuk tarafından oluşturulmuş en az 5 aktif yavru proses PID’sinin ekrana yazdırılması.
Çözüm:
- & sembolü eklenen tüm komutlar'ı arkaplanda çalıştıracak runBackground fonksiyonu yazıldı.
- Arkaplanda çalışacak processlerin çıkış yaptığında veya yok edildiğinde zombi'ye dönüşmemeleri için runBackground fonkisyonu içerisinde SIGCHLD sinyali yakalandı ve parent process tarafından beklenmesi sağlandı.
- Kabuk ilk açıldığında runBackground fonksiyonu ile arkaplanda 5 yavru process oluşturuldu.
- Bu processlerin PID'leri bir diziye eklendi.
- Daha sonrasında açılan tüm processlerin PID'leri de bu diziye dahil edildi.
- Showpid fonksiyonunda bu dizideki processlerin durumları kontrol edildi ve aktif olarak çalışmakta olan processler ekrana yazdırıldı.
https://man7.org/linux/man-pages/man2/sigaction.2.html
https://linux.die.net/man/2/waitpid
https://www.cplusplus.com/reference/cstring/strtok/
https://www.qnx.com/developers/docs/6.5.0SP1.update/com.qnx.doc.neutrino_lib_ref/e/execvp.html
https://man7.org/linux/man-pages/man2/chdir.2.html
https://www.cplusplus.com/reference/cstring/memset/