問題タブ [eintr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
819 参照

linux - Linux で SIGCHLD、EINT、および accept() を処理する適切な方法

TCP サーバーを作成するプログラムがあります。accept() がクライアントに接続すると、それを fork() して接続を処理します。そのクライアントが離れると、SIGCHLD のために waitpid() が呼び出されますが、accept() で EINTR が発生します。私の質問は、これをどのように処理する必要があるかです。私は非常に多くの異なる方法を読みました。

ほとんどの人は、EINT を無視して、accept() を再試行すると言います。ちょうどそれを行うマクロを見たことがあります: TEMP_FAILURE_RETRY()。sigaction フラグ SA_RESTART および SA_NOCLDSTOP を設定すると言う人もいます。私はそれを試しましたが、他のエラーが発生します (errno = ECHILD)。また、子供はどのように終了する必要がありますか?_exit(0) と exit(0) の両方を見てきました。

SIGCHLD の処理は次のとおりです。

0 投票する
1 に答える
1024 参照

linux - epoll_wait() は EINTR を無限に返す

さまざまな fd のポーリングを担当するスレッドがあります。タイムアウトを設定して epoll_wait を使用しています。以下はコード スニペットです。

eventsList メモリには、timerfd、signalfd、および socket fd が含まれます。

スレッドはうまく機能し、タイマー イベント、ソケットのオープン/読み取り/書き込み/クローズ イベント、およびユーザー定義のシグナル イベントを処理します。

ただし、errno が常にEINTRを返すため、スレッドが無限の do-while ループに陥る場合があります。
スレッドのトップ -Hは、ステータスをスリープとして表示します。straceは、ループ内で epoll_wait() を呼び出していることを明らかにします。

では、epoll_wait と EINTR を処理するために広く受け入れられている方法を使用しているため、何が問題になる可能性がありますか? 上記の問題を引き起こす可能性のあるソケットの読み取り/書き込み/クローズに問題がある可能性はありますか? またはtimerfdで?

更新: strace -p 出力:

次に、gcore を使用して、epoll_wait() によって返される errno を取得しようとしました。4(EINTR)です

0 投票する
0 に答える
111 参照

c - EINTR が原因で失敗したシステム コールを再試行する必要がありますか?

私はこのようなコードを見てきました:

システムコールが中断されたために失敗した場合、システムコールを再試行するという考え方です。しかし、それは良い考えですか?いつそれが良いアイデアで、いつこれを行うべきではないのですか? これは特定のプラットフォームに固有のものですか? それとも、WindowsまたはUnix でシステム コールが EINTR で失敗する可能性がありますか? クロス プラットフォーム コードを記述しようとしている場合はどうすればよいですか?

0 投票する
0 に答える
100 参照

c - スレッド内でシグナルハンドラが機能しない

次のプログラムでは、SIGINT シグナルが到着すると、スレッドが直接終了する理由がわかりません (シグナル ハンドラーによってカバーされていない場合でも)。main()ただし、これはプロセスでは発生しません。

シグナルハンドラ:

スレッド機能:

どこ:

スレッドの作成と切り離し:

すべてのコードを確認したい場合: server.c: https://pastebin.com/6BQA3mx6

client.c: https://pastebin.com/e42hKPxj

utils.h: https://pastebin.com/hLbySeFF

conn.h: https://pastebin.com/fL5cMxcg

0 投票する
1 に答える
65 参照

pgloader - pgloader: "接続" のソケット エラー: EINTR (中断されたシステム コール) および HEAP-EXHAUSTED-ERROR

最近、pgloader を使用して mysql から postgres にデータを移行しようとしています。と遭遇HEAP-EXHAUSTED-ERRORSocket errorました。の場合HEAP-EXHAUSTED-ERROR、バッチ サイズとワーカーを削減しようとしましたが、うまくいきませんでした。についてEINTR (Interrupted system call)は、根本的な原因がわかりません。