プロファイリングフレームワークの開発中に、プログラムがシグナルを受信すると実行中のスレッド(メインスレッドを含む)をすべて停止する必要があるという問題(SIGUSR1たとえば)およびLinux/POSIXシステム上に実装することができ、次のワークフローの可能性がある場合、私は興味があります:シグナルを使用してLinuxプログラムのすべてのスレッドを一時停止する
過負荷んSIGUSR1のためのシグナル・ハンドラ:
それは中断し、実行中のすべてのプログラムのスレッドにはアクセスできませんが、pidなどの情報にアクセスすることはできません。たとえスレッドがpthreadsを介して直接使用されていても、OpenMPインスタンスであっても。
収集されたすべてのデータをディスクに書き込みます(ここではその原点は関係ありません)。しかし、書き込みプロセスは、プロファイリングによって収集された実行時データに影響を与えます。このため、すべてのスレッドを停止する必要があります。
プロファイリングデータを書き込んだ後、すべてのスレッドを続行します。
スレッド信号処理について私が読んだことは、信号がプロセスに送られると、プログラムの任意のスレッドが信号を処理するということでした。しかし、これは私を助けません。
シグナルをpid '-pgrp'に送ることで、プロセスグループ全体にシグナルを送ることができます。 – Ctx
...実行中のすべてのスレッドを一時停止していますが(何とか)、その時間までに他のスレッドが実行されました:( –