killのコマンド。 +++ recieve.c +++ #include <signal.h> #include <stdio.h> #include <unistd.h>

C言語関連 | Linux系66閲覧

ベストアンサー

0

ThanksImg質問者からのお礼コメント

ありがとうございました!勉強になりました!

お礼日時:1/8 22:25

その他の回答(1件)

0

30年前にコーディングしていたものです。 もう覚えてないんですが、たまたま電源が入っていたRasPiでやってみました。 int cnt=0; void ha(int sig, siginfo_t *info, void *v) { int i; cnt++; printf("cnt=%d pid; %d\n",cnt, info->si_pid); for (i=0; i<10; i++) { sleep(1); } printf("cnt=%d uid; %d\n",cnt, info->si_uid); } void ha2(int sig, siginfo_t *info, void *v) { int i; cnt++; printf("cnt=%d pid; %d\n",cnt, info->si_pid); for (i=0; i<100000000; i++) { if (i%10000000==0) printf("%d\n",i+1); } printf("cnt=%d uid; %d\n",cnt, info->si_uid); } >ハンドラーが中断して、またハンドラーが呼び出されるというようなことはおこらない 中段はしないが、待機中にsignalを送ると再度ハンドラーが呼び出されることはRasPiでは起こる。 >ハンドラー終了後、実行していなかった呼び出された分のハンドラーが送られたシグナルの回数分実行される訳ではない これはタイミングによってですが、2回目のha処理の途中に4回目のシグナルを送ると4回目を実施することはありました。 >Signalコリジョン説ですがha2の結果も、haの結果もRasPiでは同じ結果でした。 https://www.jpcert.or.jp/sc-rules/c-sig30-c.html なんでこうなる?の回答はでませんでしたが、print文を挟んでいろいろやって見られるとよいかと思います。