私はCのシグナルに精通しています。どのようなシグナルSIGUSR1
およびSIGUSR2
は、どのようにトリガーできますか。誰も私にそれを説明できますか?
これらはユーザー定義シグナルであるため、特定のアクションによってトリガーされることはありません。プログラムで明示的に送信できます。
#include <signal.h>
kill(pid, SIGUSR1);
ここで、pid
は受信プロセスのプロセスIDです。受信側では、それらのシグナルハンドラを登録できます。
#include <signal.h>
void my_handler(int signum)
{
if (signum == SIGUSR1)
{
printf("Received SIGUSR1!\n");
}
}
signal(SIGUSR1, my_handler);
それらは、アプリケーション開発者が使用するシグナルです。カーネルはこれらをプロセスに送信すべきではありません。 kill(2)
またはユーティリティkill(1)
を使用して送信できます。
同期にシグナルを使用する場合は、リアルタイムシグナルを確認することをお勧めします(シグナルがさらにある、キューに入れられている、配信順序が保証されているなど)。
ターミナル1
dd if=/dev/sda of=debian.img
ターミナル2
killall -SIGUSR1 dd
ターミナル1に戻ります
34292201+0 records in
34292200+0 records out
17557606400 bytes (18 GB) copied, 1034.7 s, 17.0 MB/s