GNU/Linux >> Linux の 問題 >  >> Linux

UNIX / Linux:プロセスにシグナルを送信する 3 つの方法

質問 :別のプロセスにシグナルを送信するにはどうすればよいですか? 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-^?;

Linux
  1. システム管理者向けの30のLinuxプロセス演習

  2. UNIX / Linux プロセス:C fork() 関数

  3. setsid() が役立つのはいつですか? Linux でプロセスをグループ化する必要があるのはなぜですか?

  1. Linux – Initプロセス:すべてのプロセスの祖先?

  2. Linux – Ctrl + cはSigintシグナルを複数のプロセスに送信できますか?

  3. UNIX/Linuxでシェルスクリプトを実行する4つの方法

  1. Linux シグナルの基礎 – パート I

  2. Ubuntu Linux でのプロセスの管理

  3. UNIX/Linux シグナル処理:SIGEV_THREAD