Linux で sigpipe 信号を扱う方法
SIGPIPE シグナルの処理について、Linux では次のような方法が利用できます。
- 信号を無視する:signal()関数を使い、SIGPIPEシグナルをSIG_IGNに設定ことで、無視できます。例えば:
#include <signal.h>
int main() {
signal(SIGPIPE, SIG_IGN);
// 在接收到SIGPIPE信号时,不会中断程序执行,而是继续执行后续操作
// ...
}
- SIGPIPE信号を処理するためにカスタムの信号処理関数を設定するには、signal()関数を使用します。例えば:
#include <stdio.h>
#include <signal.h>
void sigpipe_handler(int signo) {
printf("Received SIGPIPE signal.\n");
// 其它处理操作
// ...
}
int main() {
signal(SIGPIPE, sigpipe_handler);
// 在接收到SIGPIPE信号时,会调用sigpipe_handler()函数进行处理
// ...
}
シグナルSIGPIPEが処理されない場合、通常、パイプまたはソケットが閉じられたとき、カーネルがプロセスにSIGPIPE シグナルを送信し、プログラムが終了します。SIGPIPE シグナルの処理時に、シグナルを無視すること(非推奨。プログラムが正常に終了できない可能性あり)または、カスタムのシグナル処理関数を使用して処理することを選択できます。