Neden bazı programlar derhal kabuğa geri dönerken, diğerleri yürütme tamamlanana kadar geri dönüyor?


13

Modern İşletim Sistemleri kitabından bir komut çalıştırıldığında kabuğun bir alt işlem oluşturduğunu, çocuk yürütmeyi bitirene kadar beklediğini ve daha sonra kullanıcıdan başka bir komut beklediğini okudum . Bu gibi birçok program için de durum böyledir gedit. Terminal kapanana kadar komut almaz gedit. Ancak atom kodu düzenleyicisini açtığımda , kabuk, düzenleyici çalışırken bile sonraki komutu kabul etmeye hazır olarak hemen geri döner. Terminali kapatma does not yakın atomu. Bu, editörün bir alt süreç olarak açılmadığı anlamına mı geliyor? Bunu mümkün kılan temel mekanizma nedir?

Koşu ps au | grep atomverir

<username>      8042  0.0  0.0  15944  2264 pts/1    S+   00:55   0:00 grep --color=auto atom

1
Atom editörünü başlattıktan sonra ps au | grep atomterminalde çalışabilir ve sorunuza çıktı ekleyebilir misiniz?
kirill-a

@ kirill-a Soruyu güncelledim.
Aswin PJ

Yanıtlar:


18

Soru iki tür program hakkında soru soruyor:

  1. kabuktaki kullanıcı ile etkileşime giren programlar ve
  2. kabuktaki kullanıcı ile etkileşime girmeyen programlar .

İlk durumda, kabuktaki kullanıcıyla etkileşime giren programlar, denetimi kabuğa döndürmeden önce tamamlanacak şekilde tasarlanmıştır. Özel bir şey yapılmaz.

İkinci vaka daha karmaşıktır. Tipik olarak, bir program olacak çatal (bellekte kendisinin bir kopyalama) ve kabuk ile ilişkisi kaldırmak için düzenlemek kontrol terminal ve edebilir yürütmek başka bir program -, bağımsız bir şekilde, orijinal kabuğun çalışır. İkinci programdan mesajlar görebilirsiniz, ancak genellikle sizinle etkileşime girmez. Nasıl kullanıldığına bağlı olarak,

  • bir daemon (sunucu) işlemi veya
  • program yeni bir pencerede çalışabilir. Grafik editörler ikincisini yapar.

Daha fazla okuma:


Terminalin çatallanması ve ayrılması ile ilgili bölüm genellikle daemontüm bunları yapan kütüphane fonksiyonunu çağırarak yapılır .
kasperd

Bir kontrol terminali almamak için çift ​​çatal kullanılır
jfs

Her iki yoruma da: işlev POSIX'te değil ve terminalleri kontrol ettiğimin farkındayım, ancak cevabı kısa ve basit tuttum. 1980'lerin sonlarından beri çift çatal kullandım.
Thomas Dickey
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.