Apa yang terjadi pada permintaan ke layanan yang dihentikan dengan SIGSTOP

8

Jika Anda mengirim SIGSTOP ke server web, apakah kernel hanya memberi tahu tumpukan jaringan untuk memblokir / menidurkan semua koneksi ke soket server itu hingga diteruskan? Tampaknya nilai batas waktu server tidak masalah; itu akan menunggu tanpa batas, tetapi bagaimana?

Apakah permintaan akan duduk di buffer soket tanpa batas? Bagaimana jika server web mendapat banyak permintaan? Apa yang terjadi ketika buffer socket terisi?

Gregg Leventhal
sumber

Jawaban:

5

Dari sudut pandang bagian mana pun dari sistem yang tidak mementingkan keadaan proses dan statistik, proses yang dihentikan (yaitu tidak akan dijadwalkan sampai menerima SIGCONT) tidak dapat dibedakan dari proses yang sedang berjalan, tetapi tidak menanggapi permintaan tertentu. Misalnya, tumpukan jaringan beroperasi dengan cara yang sama apakah proses dihentikan, atau sedang bekerja (menggunakan waktu CPU) tetapi tidak membuat panggilan sistem apa pun, atau diblokir dalam panggilan sistem yang tidak terblokir oleh jaringan yang berasal dari jaringan acara (misalnya menunggu untuk membaca dari pipa), dll.

Sementara proses dihentikan, tidak ada batas waktu dalam proses. Biasanya tidak ada timeout dalam tumpukan jaringan: paket telah diterima oleh mesin, bahkan jika belum sampai ke mesin. Sejauh menyangkut transmisi TCP, paket telah diterima dan terserah aplikasi untuk merespons.

Jika buffer soket terisi, tumpukan jaringan akan mulai menjatuhkan paket.

Tidak ada alasan mengapa perilaku tumpukan jaringan akan tergantung pada status proses. Proses itu bisa keluar dari keadaan berhenti kapan saja. Mungkin ada beberapa proses mendengarkan pada soket, sehingga keputusan apa pun berdasarkan status proses harus memperhitungkan semuanya.

Gilles 'SANGAT berhenti menjadi jahat'
sumber