2

現在、バックグラウンド スレッド (PTHREAD_DETACHED) を作成してから pthread_exit(0) を呼び出すマルチスレッド プログラム (pthreads を使用) を使用しています。私の問題は、プロセスが「無効」としてリストされ、不思議なことに /proc に「実際に存在する」ように見えないことです(これは私のデバッグ戦略を無効にします)

以下の要件を満たすことを希望します。

  • プログラムは関数 A をループで実行し、関数 B を 1 回実行する必要があります
  • プログラムの PID /proc/$pid/exe、/proc/$pid/maps、および /proc/$pid/fd にアクセスできる必要があります (プロセスが機能していない場合、それらはすべて空または無効なリンクです)。
  • 通常どおり CTRL+C と CTRL+Z でプログラムを一時停止/中断できる必要があります

編集:「メイン」スレッドにAを、生成されたスレッドにBを配置するためにプログラムのインターフェースを変更することをためらっています(現在、それらは逆になっています)。それは問題を解決しますか?

4

3 に答える 3

2

シグナルを待機しているメイン プロセスの実行を一時停止するか、またはpthread_join().

于 2008-11-08T12:08:01.720 に答える
1

メイン スレッドでループを実行し、バックグラウンド スレッドで 1 回限りのタスクを実行するという、逆の方法で処理できない理由はありますか?

于 2008-09-25T08:36:50.553 に答える
0

最もエレガントなデザインではありませんが、終了する前にメインスレッドをブロックできます:

 while(1) {
       pause();
 }

次に、ループを中断する SIGINT および SIGTERM のシグナル ハンドラーをインストールできます。最も簡単な方法は、exit(0) :-) です。

于 2008-09-25T14:08:02.347 に答える