Rumah  >  Artikel  >  Tutorial sistem  >  Kaedah dan teknik untuk keluar proses Linux: Cara menamatkan proses dengan anggun

Kaedah dan teknik untuk keluar proses Linux: Cara menamatkan proses dengan anggun

WBOY
WBOYke hadapan
2024-02-15 11:10:02732semak imbas

Proses keluar ialah operasi biasa dalam sistem Linux Ia membenarkan proses menamatkan operasinya sendiri, melepaskan sumber yang didudukinya dan kembali ke keadaannya sendiri. Terdapat banyak sebab untuk proses keluar, seperti menyelesaikan tugas seperti biasa, menghadapi ralat, menerima isyarat, dsb. Terdapat banyak cara untuk keluar dari proses, seperti menggunakan exit(), return, _exit(), abort() dan fungsi atau pernyataan lain. Tetapi, adakah anda benar-benar tahu bagaimana untuk keluar dari proses Linux? Adakah anda tahu cara menggunakan dan memilih kaedah keluar proses yang sesuai di bawah Linux? Adakah anda tahu bagaimana untuk menamatkan proses dengan anggun di Linux? Artikel ini akan memperkenalkan anda kepada pengetahuan yang berkaitan tentang proses keluar Linux secara terperinci, supaya anda boleh menggunakan dan memahami operasi biasa ini dengan lebih baik di bawah Linux.

Linux 进程退出的方法和技巧:如何优雅地结束进程

Proses keluar

Keluar daripada proses di bawah Linux dibahagikan kepada dua jenis: keluar biasa dan keluar tidak normal:

1.Keluar seperti biasa

a. Laksanakan pulangan dalam fungsi utama().

b. Panggil fungsi exit()

c. Panggil fungsi _exit()

2.Keluar secara tidak normal

a. Hubungi tentang fungsi

b. Proses menerima isyarat, dan isyarat menyebabkan program ditamatkan.

Tidak kira kaedah keluar yang digunakan, sistem akhirnya akan melaksanakan kod yang sama dalam kernel. Kod ini digunakan untuk menutup deskriptor fail terbuka yang digunakan oleh proses dan melepaskan memori dan sumber lain yang didudukinya.

Perbandingan beberapa kaedah keluar

1 Perbezaan antara keluar dan balik:

keluar ialah fungsi dengan parameter. Selepas keluar dilaksanakan, kawalan diserahkan kepada sistem

return ialah pulangan selepas fungsi dilaksanakan. Selepas pemulangan dilaksanakan, kawalan diserahkan kepada fungsi panggilan.

2 Perbezaan antara keluar dan menggugurkan kandungan:

keluar adalah penamatan biasa proses

tentang adalah penamatan tidak normal.

exit() dan _exit() fungsi

Fungsi keluar dan _keluar kedua-duanya digunakan untuk menamatkan proses. Apabila program melaksanakan exit atau _exit, sistem tanpa syarat menghentikan semua operasi yang tinggal, mengosongkan pelbagai struktur data dan menamatkan proses berjalan.

keluar diisytiharkan dalam fail pengepala stdlib.h, manakala _exit() diisytiharkan dalam fail pengepala unistd.h. Parameter exit_code dalam exit ialah 0, yang bermaksud bahawa proses itu ditamatkan secara normal Jika nilai lain, ini bermakna ralat berlaku semasa pelaksanaan program.

Perbezaan antara exit() dan _exit()

_exit() kembali ke kernel serta-merta selepas pelaksanaan, manakala exit() mula-mula melakukan beberapa operasi pembersihan dan kemudian menyerahkan kawalan kepada kernel.

Apabila fungsi _exit dipanggil, ia akan menutup semua deskriptor fail proses, membersihkan memori dan beberapa fungsi pembersihan kernel lain, tetapi tidak akan menyegarkan aliran (stdin, stdout, stderr...). di atas fungsi _exit Pembalut yang memanggil _exit dan mengepam strim sebelum memanggilnya.

Perbezaan terbesar antara fungsi exit() dan fungsi _exit() ialah fungsi exit() menyemak status terbuka fail dan menulis kandungan penimbal fail kembali ke fail sebelum memanggil sistem keluar. Oleh kerana terdapat operasi yang dipanggil "I/O buffered" dalam perpustakaan fungsi standard Linux, cirinya ialah terdapat penimbal dalam memori yang sepadan dengan setiap fail yang terbuka. Setiap kali fail dibaca, beberapa rekod akan dibaca secara berterusan, supaya pada kali berikutnya fail dibaca, ia boleh dibaca terus dari penimbal memori sama, setiap kali fail ditulis, ia hanya ditulis ke memori penimbal. Apabila syarat tertentu dipenuhi (seperti mencapai nombor tertentu atau menemui aksara tertentu, dsb.), kandungan dalam penimbal ditulis pada fail sekaligus. Teknologi ini sangat meningkatkan kelajuan membaca dan menulis fail, tetapi ia juga membawa sedikit masalah kepada pengaturcaraan. Sebagai contoh, terdapat beberapa data yang dianggap telah ditulis ke fail Sebenarnya, kerana ia tidak memenuhi syarat tertentu, ia hanya disimpan dalam penimbal Pada masa ini, gunakan fungsi _exit() untuk menutup terus proses, dan data dalam penimbal akan hilang. Oleh itu, jika anda ingin memastikan integriti data, anda mesti menggunakan fungsi exit().

Mari kita lihat perbezaan antara mereka melalui contoh fungsi:

Fungsi contoh 1: exit.c

#include
#include

int main()
{
printf("using exit----\n");
printf("This is the content in buffer\n");
exit(0);
}

Hasil pelaksanaan ialah:

using exit----

This is the content in buffer

Contoh fungsi 2: _exit.c

#include
#include

int main()
{
printf("using _exit--\n");
printf("This is the content in buffer");
_exit(0);
}

Hasil pelaksanaan ialah:

using _exit--

Fungsi printf menggunakan buffer I/O Fungsi ini membaca rekod secara automatik daripada penimbal apabila menemui aksara baris baharu "n". Oleh itu, exit() keluar selepas menulis data dalam buffer, manakala fungsi _exit() keluar terus.

Anda juga boleh menukar printf("Ini ialah kandungan dalam penimbal"); dalam contoh fungsi 2 kepada printf("Ini ialah kandungan dalam penimbal") (iaitu, tambah n di penghujung printf untuk melihat apa hasilnya adalah. Mengapa ini berlaku?

Urutan berbeza di mana proses ibu bapa dan anak ditamatkan akan menghasilkan hasil yang berbeza

1. Proses ibu bapa tamat sebelum proses anak:

Situasi ini adalah proses anak yatim yang kami gunakan sebelum ini. 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, proses kanak-kanak memasuki keadaan zombi dan akan kekal sedemikian sehingga sistem dimulakan semula. Apabila proses anak berada dalam keadaan zombie, kernel hanya menyimpan beberapa maklumat yang diperlukan tentang proses untuk proses induk. Pada masa ini, proses kanak-kanak sentiasa menduduki sumber, dan ia juga mengurangkan bilangan maksimum proses yang boleh dibuat oleh sistem.

Apakah keadaan zombi?

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

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

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

Melalui artikel ini, anda seharusnya mempunyai pemahaman yang menyeluruh tentang kaedah keluar proses Linux, dan mengetahui definisi, prinsip, penggunaan, kelebihan dan keburukannya. Anda juga harus memahami sebab dan kesan proses keluar, dan cara menggunakan dan memilih kaedah keluar proses dengan betul di bawah Linux. Kami mengesyorkan bahawa apabila menggunakan sistem Linux, anda menggunakan kaedah keluar proses yang sesuai untuk menamatkan proses untuk meningkatkan kestabilan dan kecekapan sistem. Pada masa yang sama, kami juga mengingatkan anda untuk memberi perhatian kepada beberapa masalah dan cabaran yang berpotensi apabila menggunakan kaedah keluar proses, seperti proses zombi, kebocoran memori, pengendalian isyarat, dsb. Saya harap artikel ini dapat membantu anda menggunakan sistem Linux dengan lebih baik dan membolehkan anda menamatkan proses dengan anggun di bawah Linux.

Atas ialah kandungan terperinci Kaedah dan teknik untuk keluar proses Linux: Cara menamatkan proses dengan anggun. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:lxlinux.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam