int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
act が NULL でない場合、シグナル signum の新しいアクションは act からインストールされます。oldact が NULL でない場合、以前のアクションが oldact に保存されます。
これはhttps://linux.die.net/man/2/sigactionからのものです。「前のアクション」が何を意味するのかよくわかりません。と呼ばれるデフォルトでのアクションを意味しますsignum
か?以下のようにコードをテストしましたが、コアがダンプされました。
#include <signal.h>
#include <unistd.h>
struct sigaction act, oact;
void func(int p)
{
oact.sa_handler(p); # core dumped here
}
int main(int argc, char **argv)
{
act.sa_handler = func;
sigaction(SIGINT, &act, &oact);
sleep(100);
return 0;
}