2017-02-08 5 views
1

私はthis questionを読んでいて、「選択」は再入可能ではないことを知りました。それで、途中で信号が届くと(例えばSIGKILL)、何が起こるのでしょうか?これは決して再び使用できないという意味ですか?リエントラントでないLinux機能(選択)が実行を終了しない場合はどうなりますか?

私はthis issueを解決しようとしていますが、これは読んでいると思いますが、これが原因です。信号がselectへの呼び出しの途中で配信されている場合は

+0

SIGKILLは信号のAvada Kedavraです。あなたがその兆候を得た場合、あなたは死んでおり、あなたのお母さんの愛はあなたを守らないでしょう。 – PSkocik

答えて

4

、その後、select-1を返し、EINTRerrnoを設定します。これでselectへの呼び出しが終了し、selectに再度電話することができます。

あなたははできません doはシグナルハンドラの中でselectを呼び出します。その場合は、最初にselectが返される前にselectに電話しているためです。もちろんシグナルハンドラでselectと呼ぶのは意味がありません。とにかく決して行うことはありません。

結論:信号が正しく処理されていれば、信号の後にもう一度selectに電話をかけることはできません。

+0

シグナルがSIGKILLの場合はどうなりますか? SIGKILLを 'select 'するにはどうすればいいですか? – kptlronyttcna

+0

@kptlronyttcnaプログラムがSIGKILLを受信した場合、シグナルの例を無視したと認めます。その場合、質問は意味をなさない。 – user3386109

+0

問題は、SIGKILLの後で 'read'や' select'を使うことができなくなったことです。プログラムを閉じてもう一度開いても。 – kptlronyttcna

関連する問題