raise

指定したシグナルを実行中のプロセスに送信します。

void raise(int)

raise関数は、指定されたシグナルを現在実行中のプロセスに送信する、破壊的な関数です。この関数は、シグナルをプロセスに送信するkillコマンドの使用と類似しています。raise関数を使用すると、プロセスの実行中に特定のポイントでシグナルを送信できます。

プロセス・シグナルの動作の詳細は、sigaction(2)およびkill(1)のマニュアル・ページを参照してください。

例7-37 raiseを使用して実行中のプロセスを停止する方法

プラグマを使用してスクリプトを開き、DTraceで破壊的関数を有効にします。かわりに、この行を削除し、dtrace -wを使用してスクリプトを実行することもできます。このスクリプトの述語は、指定された引数に対してプロセスIDを評価します。この節には、プロセスを即時に停止するSIGINTシグナルを持つraise関数が含まれています。

#pragma D option destructive
syscall::: 
/pid==$1/
{ 
   raise(SIGINT); 
   exit(0) 
}

このスクリプトを正しく機能させるには、停止するプロセスIDを指定する必要があります。テスト実行の例を次に示します:

xclock & sudo dtrace -wn 'syscall::: /pid==$1/{ raise(SIGINT); exit(0) }' $(pidof xclock)