Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxについて >> Linuxのexitコマンドと_exitコマンドの違い

Linuxのexitコマンドと_exitコマンドの違い

  
                

Linuxのsystemコマンドでは、exitコマンドと_exitコマンドは同じように見えますが、exitコマンドと_exitコマンドの違いは異なります。それを知りましょう。
ログイン

注出口()、0は正常終了を示し、プログラムは終了渡さ終了ステータスコードパラメータであり、他方は通常1または-1で、非正常終了を示し、標準C EXIT_SUCCESSとEXIT_FAILUREの2つのマクロがあり、exit(EXIT_SUCCESS)が付いています;読みやすさはよくなっています。

システムコールとしての_exitとexitは、一組の双子の兄弟ですが、どれほど似ているかについては、Linuxのソースコードから答えを見つけることができます。

#define __NR__exit __NR_exit /*ファイルinclude /asm-i386 /unistd.hの334行目からの抜粋* /

' __ NR_'は、Linuxソースコードの各システムコールの接頭辞です。最初の出口の前にあることに注意してください。 2つの下線、2番目の出口の前に1つの下線のみ。 Cを知っていて、はっきりしている人なら誰でも_exitとexitの間に違いはないと言うでしょうが、両者の違いについて話しましょうこの違いは主にライブラリでの定義に反映されています。 Linuxライブラリの_exitのプロトタイプは次のとおりです。

#i nclude "unistd.h" void _exit(int status);
exitと比較して、exit()関数はstdlibで定義されています。 hと_exit()はunistd.hで定義されています、その名前から、stdlib.hはunistd.hより少し高いように見えます。 _exit()関数は最も簡単です:直接プロセスを停止し、それが使用するメモリ空間をクリアし、そしてカーネル内のその様々なデータ構造を破壊する; exit()関数はこれらの基礎にラッパーを作り、実行します。いくつかのステップが出口の前に追加されました、そしてこの理由で、何人かの人々は出口がもはや純粋なシステムコールではないと思います。 exit()関数と_exit()関数の最大の違いは、exit()関数がexitシステムコールを呼び出す前に開いているファイルをチェックし、ファイルバッファの内容をファイルに書き戻すことです。これは「I /Oのクリーンアップ」です。バッファ - 。

exit()それを呼び出したプロセスを終了する前に、次のステップを実行してください。

1. atexit()で登録された関数を呼び出し(エクスポート関数); ATEXIT登録の逆の順序で呼び出します。それによって登録されたすべての機能。これにより、プログラムが終了したときに独自のクリーンアップアクションを実行するように指定できます。たとえば、プログラム状態情報をファイルに保存したり、共有データベースのロックを解除するなどです。

2.cleanup();開いているすべてのストリームを閉じると、バッファされているすべての出力が書き込まれ、TMPFILE関数で作成されたすべての一時ファイルが削除されます。

3.最後に、_exit()関数が呼び出されてプロセスが終了します。

_exitは3つのことをします(人):1、プロセスに属するすべての開いているファイル記述子は閉じられます2、プロセスの子はプロセス1によって継承されます、init 3、プロセスの親が送信されますSIGCHLDシグナル

exitクリーンアップが完了したら、_exitが呼び出されてプロセスが終了します。

さらに、別の説明:

簡単に言うと、exit関数は呼び出しプロセスを終了します。プログラムを終了する前に、すべてのファイルが閉じられ、バッファリングされた出力によって定義が更新され、更新されたすべての< export functions"(atexitによって定義された)が呼び出されます。

_exit:この関数はPosixによって定義されており、終了ハンドラやシグナルハンドラを実行するものではなく、UNIXシステム上の標準I /Oストリームをフラッシュするものではありません。

簡単に言うと、_exitは呼び出しプロセスを終了しますが、ファイルを閉じたり、出力キャッシュを消去したり、exit関数を呼び出したりしません。

共通:

プロセスの終了方法に関係なく、カーネルはプロセスによって開かれたすべてのファイル記述子を閉じて、プロセスによって使用されていたメモリを解放します。
前12次合計2ページzh-CN"],null,[1],zh-TW"]]]

Copyright © Windowsの知識 All Rights Reserved