私はthis questionを読んでいて、「選択」は再入可能ではないことを知りました。それで、途中で信号が届くと(例えばSIGKILL)、何が起こるのでしょうか?これは決して再び使用できないという意味ですか?リエントラントでないLinux機能(選択)が実行を終了しない場合はどうなりますか?
私はthis issueを解決しようとしていますが、これは読んでいると思いますが、これが原因です。信号がselect
への呼び出しの途中で配信されている場合は
私はthis questionを読んでいて、「選択」は再入可能ではないことを知りました。それで、途中で信号が届くと(例えばSIGKILL)、何が起こるのでしょうか?これは決して再び使用できないという意味ですか?リエントラントでないLinux機能(選択)が実行を終了しない場合はどうなりますか?
私はthis issueを解決しようとしていますが、これは読んでいると思いますが、これが原因です。信号がselect
への呼び出しの途中で配信されている場合は
、その後、select
は-1
を返し、EINTR
にerrno
を設定します。これでselect
への呼び出しが終了し、select
に再度電話することができます。
あなたははできません doはシグナルハンドラの中でselect
を呼び出します。その場合は、最初にselect
が返される前にselect
に電話しているためです。もちろんシグナルハンドラでselect
と呼ぶのは意味がありません。とにかく決して行うことはありません。
結論:信号が正しく処理されていれば、信号の後にもう一度select
に電話をかけることはできません。
シグナルがSIGKILLの場合はどうなりますか? SIGKILLを 'select 'するにはどうすればいいですか? – kptlronyttcna
@kptlronyttcnaプログラムがSIGKILLを受信した場合、シグナルの例を無視したと認めます。その場合、質問は意味をなさない。 – user3386109
問題は、SIGKILLの後で 'read'や' select'を使うことができなくなったことです。プログラムを閉じてもう一度開いても。 – kptlronyttcna
SIGKILLは信号のAvada Kedavraです。あなたがその兆候を得た場合、あなたは死んでおり、あなたのお母さんの愛はあなたを守らないでしょう。 – PSkocik