Rumah  >  Artikel  >  Tutorial sistem  >  Cara menamatkan proses di bawah Linux: Penjelasan terperinci tentang penamatan biasa dan tidak normal

Cara menamatkan proses di bawah Linux: Penjelasan terperinci tentang penamatan biasa dan tidak normal

王林
王林asal
2024-07-18 22:11:07614semak imbas

Linux 下结束进程的方法:正常与异常终止详解

Dalam dua bab pertama, kami belajar tentang mencipta proses Dalam bab ini, kami akan belajar cara menamatkan proses di bawah Linux.

Di Linux, terdapat 3 cara untuk menamatkan proses secara normal dan 2 cara untuk menamatkan secara tidak normal:

1. Akhir biasa:

a. Panggilan kembali dalam fungsi utama. Ini bersamaan dengan memanggil keluar.

b. Panggil fungsi keluar Mengikut definisi fungsi ini dalam ANSIC, apabila dipanggil, semua pemegang keluar yang didaftarkan akan dilaksanakan, semua aliran I/O standard akan dimatikan, dan deskriptor fail dan pelbagai proses (proses induk) tidak akan diproses (dengan proses kanak-kanak), pekerjaan, dsb., jadi ia tidak sesuai untuk sistem Linux.

c. Panggil fungsi _exit. Keluar dipanggil latihan linux oleh _exit dan menutup beberapa pemegang keluar khusus linux.

2. Penamatan tidak normal

linux保存退出命令行_linux退出保存文件_linux下退出不保存

a. Ini nampaknya merupakan kes istimewa bagi kes kedua, kerana ia membentuk isyarat SIGABRT.

b. Proses menerima isyarat tertentu Isyarat ini boleh dihasilkan oleh proses itu sendiri (seperti fungsi abort), atau ia boleh datang dari proses lain atau kernel. Sebagai contoh: apabila proses cuba mengakses alamat memori di luar sempadan atau apabila pembahagi adalah sifar, kernel akan menjana isyarat untuk mengganggu proses.

Tidak kira kaedah yang digunakan untuk menamatkan proses, sekeping kod yang sama dalam kernel akhirnya akan dilaksanakan. Kod ini menutup semua deskriptor fail yang dibuka oleh proses, memori video yang diduduki oleh akses peribadi, dsb.

Mari kita lihat pada fungsi exit dan _exit

Dua fungsi ini terdapat dalam fail pengepala yang berbeza: exit dalam stdlib.h, _exit dalam unistd.h

linux退出保存文件_linux下退出不保存_linux保存退出命令行

Kaedah panggilan khusus mereka adalah seperti berikut:

voidexit(int__status)

void_exit(int__status)

Parameter status ialah status keluar.

Mari kita lihat dua keping kod berikut:

linux保存退出命令行_linux下退出不保存_linux退出保存文件

Gambar 1

linux下退出不保存_linux退出保存文件_linux保存退出命令行

Gambar 2

linux退出保存文件_linux保存退出命令行_linux下退出不保存

linux保存退出命令行_linux下退出不保存_linux退出保存文件

Gambar 3

linux保存退出命令行_linux退出保存文件_linux下退出不保存

Gambar 4

Kod dalam Rajah 1 kekurangan n, menyebabkan ayat pada akhir ujian tidak disalin Ini kerana jika printf tidak menambah n, maklumat tidak akan disalin serta-merta, dan _keluar tidak akan memaksa output. data dalam penimbal , iaitu data yang belum ditulis ke peranti dan masih dalam penimbal yang disebabkan oleh panggilan seperti printf/fprintf akan dibuang semasa _exit . Jika ada n, salin terus Pada masa ini, tiada beza antara keluar/_keluar

Urutan yang berbeza di mana proses abang dan kakak ditamatkan akan menghasilkan hasil yang berbeza

1. Proses ibu bapa tamat sebelum proses anak:

Keadaan ini yang kita panggil proses yatim piatu. Apabila proses induk keluar dahulu, sistem akan membiarkan proses init mengambil alih proses anak.

2 Proses anak ditamatkan sebelum proses ibu bapa, dan proses ibu bapa tidak memanggil fungsi tunggu

Dalam kes ini, sub-proses memasuki keadaan zombi dan akan kekal sedemikian sehingga sistem dimulakan semula. Apabila proses anak berada dalam keadaan zombie Di bawah Linux, ia keluar tanpa menyimpan Kernel hanya menyimpan beberapa maklumat yang diperlukan untuk proses induk. Pada masa ini, proses kanak-kanak masih menduduki sumber, dan ia juga mengurangkan bilangan maksimum proses yang boleh dibuat oleh sistem.

Apakah keadaan zombi?

Satu proses yang telah ditamatkan lama dahulu, tetapi proses induknya belum lagi menangani kesannya (mendapatkan maklumat tentang proses anak yang ditamatkan dan melepaskan sumber yang masih didudukinya) dipanggil proses zombi (zombie).

3 Proses anak ditamatkan sebelum proses indukKeluar tanpa menyimpan di bawah Linux, tetapi proses induk memanggil fungsi tunggu

Pada masa ini, proses ibu bapa akan menunggu sehingga proses anak tamat.

Atas ialah kandungan terperinci Cara menamatkan proses di bawah Linux: Penjelasan terperinci tentang penamatan biasa dan tidak normal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn