質問 :別のプロセスにシグナルを送信するにはどうすればよいですか? UNIX / Linux 環境でシグナルをプロセスに送信するために使用できるすべてのオプションについて説明してもらえますか?
答え :この記事で説明する方法のいずれかを使用して、さまざまなシグナルをプロセスに送信できます。
1. Kill を使用してプロセスにシグナルを送信する
kill コマンドを使用して、プロセスにシグナルを送信します。たとえば、プロセス「a.out」に USR1 シグナルを送信する場合は、次のようにします。
$ ps -C a.out PID TTY TIME CMD 3699 pts/1 00:00:00 a.out $ kill -s USR1 3699
注意 :プロセスを強制終了する 4 つの方法 (kill、killall、pkill、xkill) を参照してください。
2.別のプロセスからプロセスにシグナルを送信する
UNIX システム コール kill (C プログラムから) を使用して、あるプロセスから別のプロセスにシグナルを送信できます。次の C コード スニペットは、kill コマンドの使用方法を示しています。
kill システム コールは 2 つの引数を取ります。1) シグナルを送信する必要があるプロセスの PID (プロセス ID)、2) プロセスに送信する必要があるシグナル。 kill コマンドは、成功すると 0 を返します。
int send_signal (int pid) { int ret; ret = kill(pid,SIGHUP); printf("ret : %d",ret); }
3.キーボードからプロセスにシグナルを送る
端末でプロセスが実行されている場合、特定のキーの組み合わせを使用して、キーボードからそのプロセスにシグナルを送信できます。以下にいくつかの例を示します。
- SIGINT (Ctrl + C) – これはもうご存知でしょう。 Ctrl + C を押すと、実行中のフォアグラウンド プロセスが強制終了されます。これにより、SIGINT がプロセスに送信され、プロセスが強制終了されます。
- Ctrl + \ または Ctrl + Y を押すと、SIGQUIT シグナルをプロセスに送信できます
以下に示すように、「stty -a」コマンドを使用して、特定のシグナルをプロセスに送信するキー マッピングを表示できます。
$ stty -a | grep intr intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;