Linuxでのプロセスの終了方法:正常終了と異常終了を詳しく解説

王林
リリース: 2024-07-18 22:11:07
オリジナル
587 人が閲覧しました

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退出保存文件

写真3

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

写真4

図 1 のコードには n が欠落しているため、テストの最後の文がコピーされません。これは、printf が n を追加しない場合、情報がすぐにコピーされず、_exit が出力を強制しないためです。バッファ内のデータ、つまり、デバイスに書き込まれておらず、printf/fprintf などの呼び出しによってバッファ内に残っているデータは、_exit 中に破棄されますが、exit では破棄されません。 。 nがある場合は直接コピーしてください。この時、exit/_exitの違いはありません

兄弟プロセスと姉妹プロセスの終了順序が異なると、異なる結果が生じます

1. 親プロセスは子プロセスの前に終了します:

この状況を孤立プロセスと呼びます。親プロセスが最初に終了すると、システムは init プロセスに子プロセスを引き継がせます。

2. 子プロセスが親プロセスより先に終了し、親プロセスが wait 関数を呼び出さない

この場合、サブプロセスはゾンビ状態になり、システムが再起動されるまでゾンビ状態のままになります。子プロセスがゾンビ状態になると、Linux では保存せずに終了します。カーネルは、親プロセスに必要なプロセスの一部の情報のみを保存します。現時点では、子プロセスはまだリソースを占有しているため、システムが作成できるプロセスの最大数も減ります。

ゾンビ状態とは何ですか?

ずっと前に終了しているが、その親プロセスがまだ余波に対処していない (終了した子プロセスに関する情報を取得し、まだ占有しているリソースを解放している) プロセスは、ゾンビ プロセス (ゾンビ) と呼ばれます。

3. 子プロセスは親プロセスより前に終了します Linux では保存せずに終了しますが、親プロセスは wait 関数を呼び出します

このとき、親プロセスは子プロセスが終了するのを待ちます。

以上がLinuxでのプロセスの終了方法:正常終了と異常終了を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:itcool.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!