Merhaba,
Aşağıdaki konu sizin sorunuzla benzer. Buradaki püf nokta, termux, cmd, terminal gibi uygulamaların arka planda nasıl çalıştığını anlamakta. Öncelikle aşağıya attığım faydalı olacağını düşündüğüm posta bakınız.
Sonrasında bir örnekle daha anlatmaya çalışayım.
burada bir terminal uygulaması en basit haliyle nasıl yapılır anlatmaya çalışmış. Ben biraz açacağım burayı.
Evet şunun üzerinden anlatalım.
Şimdi bir terminal uygulaması oluşturdun diyelim. Bu terminal uygulaması başlatıldığı zaman işletim sistemi arka planda bir process başlatır. Evet elimizde bir process var. Şimdi bir kod parçasını inceleyelim.
int lsh_launch(char **args)
{
pid_t pid, wpid;
int status;
pid = fork();
if (pid == 0) {
// Child process
if (execvp(args[0], args) == -1) {
perror("lsh");
}
exit(EXIT_FAILURE);
} else if (pid < 0) {
// Error forking
perror("lsh");
} else {
// Parent process
do {
wpid = waitpid(pid, &status, WUNTRACED);
} while (!WIFEXITED(status) && !WIFSIGNALED(status));
}
return 1;
}
burada fork
diye bir fonksiyon kullanıldığını göreceksin. bu fork fonksiyonu, bir child process başlatır.
Şimdi Program CounterRegister falan girerdim de seviyeni bilmediğim için girmek istemiyorum. Hem konudan uzaklaşacağız.
Şimdi bu fork child da olsa ayrı bir process başlatıyor. sen python veyahut başka bir dilde os.getcwd
veya os.chdir
gibi methodlar kullandığın zaman aslında işletim sisteminden, ilgili processin çalışma dizinini değiştirme isteğinde bulunuyoruz veya ilgili processin çalışma dizinini elde etme isteğinde bulunuyoruz.
Şimdi resmi bir anlatalım. Orada aslında iki tane process çalışıyor ve sen kendi komutunu child process te çalıştırıyorsun. senin çalıştırdığın komutlar child process’in working directory sini değiştiriyor. Parent process’in current working directory’si aynı kalıyor. Senin amacın parent process’in cwd’sini değiştirmek. Bunu da sanırım sadece cd gibi komutlarla yapabilirsin. Zaten terminal gibi uygulamalar da cd
, ls
gibi komutlar için ayrı bir child proces başlatmaz, direkt parent process de işletim sistemine os.chdir gibi methodlar kullanarak istek gönderir ve işletim sistemi de parent process’in cwd sini değiştirmiş olur. Attığım yazıya serisinden göz atarsan dediğim şeyi anlayabilirsin diye düşünüyorum.
Düzeltme: Resim hatalıydı resmi düzelttim.