質問

私は現在バックグラウンド スレッド (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 を生成されたスレッドに置くために、プログラムのインターフェイスを変更することを躊躇します (現在は逆になっています)。それで問題は解決するでしょうか?

役に立ちましたか?

解決

シグナルを待っているメインプロセスの実行を一時停止することも、スレッドを切り離さないこともできます(デフォルトを使用) PHTREAD_CRATE_JOINABLE) で終了を待っています pthread_join().

他のヒント

逆のことができない理由はありますか:メインスレッドにループを実行させ、1回限りのタスクをバックグラウンドスレッドで実行させますか?

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

 while(1) {
       pause();
 }

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top