Mengapa beberapa program segera kembali ke shell sementara yang lain tidak sampai eksekusi selesai?

13

Saya telah membaca dari buku sistem Operasi Modern bahwa ketika perintah dijalankan, shell membuat proses anak, menunggu sampai anak selesai dieksekusi dan kemudian menunggu perintah lain dari pengguna. Ini memang kasus untuk banyak program seperti gedit. Terminal tidak menerima perintah sampai saya menutup gedit. Namun ketika saya membuka editor kode atom , shell segera kembali, siap untuk menerima perintah berikutnya bahkan dengan editor berjalan. Menutup terminal tidak menutup atom. Apakah ini berarti editor dibuka bukan sebagai proses anak-anak? Apa mekanisme mendasar yang memungkinkan hal ini terjadi?

Berlari ps au | grep atommemberi

<username>      8042  0.0  0.0  15944  2264 pts/1    S+   00:55   0:00 grep --color=auto atom
Aswin PJ
sumber
1
Setelah memulai editor atom, dapatkah Anda berjalan ps au | grep atomdi terminal dan menambahkan output ke pertanyaan Anda?
kirill-a
@ kirill-a Saya telah memperbarui pertanyaan.
Aswin PJ

Jawaban:

18

Pertanyaannya menanyakan tentang dua jenis program:

  1. program yang berinteraksi dengan pengguna di shell, dan
  2. program yang tidak berinteraksi dengan pengguna di shell.

Dalam kasus pertama, program yang berinteraksi dengan pengguna di shell dirancang untuk berjalan hingga selesai sebelum mengembalikan kontrol ke shell. Tidak ada yang istimewa yang dilakukan.

Kasus kedua lebih rumit. Biasanya program akan melakukan fork (membuat salinan dirinya dalam memori), dan mengatur untuk menghapus hubungannya dengan terminal pengendali shell , dan dapat menjalankan program lain - yang berjalan secara independen dari shell asli. Anda mungkin melihat pesan dari program kedua, tetapi biasanya tidak berinteraksi dengan Anda. Tergantung bagaimana menggunakannya, Anda mungkin memilikinya

  • proses daemon (server), atau
  • program dapat berjalan di jendela baru. Editor grafis melakukan yang terakhir.

Bacaan lebih lanjut:

Thomas Dickey
sumber
Bagian tentang forking dan disassociating dari terminal sering dilakukan dengan memanggil daemonfungsi library yang melakukan semua ini.
kasperd
Untuk menghindari mendapatkan terminal pengendali, garpu ganda digunakan
jfs
Untuk kedua komentar: fungsi ini tidak ada dalam POSIX, dan saya sadar mengendalikan terminal, tetapi menjaga jawabannya tetap pendek dan sederhana. Saya telah menggunakan garpu ganda sejak akhir 1980-an.
Thomas Dickey