質問:プログラムにメイン スレッドが 1 つしかなく、 fork が呼び出された場合、 fork によって作成された子プロセスにもスレッドが 1 つしか存在しないことに注意してください。 マルチスレッド プログラムに fork を組み込むとどうなるでしょうか? 試してみましょう: ケース(1)子スレッドを作成する前にフォークするコード: #include <stdio.h> #include <pthread.h> #include <unistd.h> void* pthread_fun(void* 引数) { printf("fun = %d\n", getpid()); pthread_exit(NULL); } int メイン() { フォーク(); pthread_t ID; pthread_create(&id, NULL, pthread_fun, NULL); printf("main_pid = %d\n", getpid()); pthread_join(id, NULL); 0を返します。 } 結果: フォークされた子プロセスも独自の子スレッドを作成します ( ケース(2)子スレッドを作成した後にフォークするコード: #include <stdio.h> #include <pthread.h> #include <unistd.h> void* pthread_fun(void* 引数) { printf("fun = %d\n", getpid()); pthread_exit(NULL); } int メイン() { pthread_t ID; pthread_create(&id, NULL, pthread_fun, NULL); フォーク(); printf("main_pid = %d\n", getpid()); pthread_join(id, NULL); 0を返します。 } 結果: 子スレッドを作成した後、子プロセスが作成されます。このとき、フォークした子プロセスはフォーク後のコードのみを実行します ( ケース(3)子スレッドの分岐コード: #include <stdio.h> #include <pthread.h> #include <unistd.h> void* pthread_fun(void* 引数) { フォーク(); printf("fun = %d\n", getpid()); pthread_exit(NULL); } int メイン() { pthread_t ID; pthread_create(&id, NULL, pthread_fun, NULL); printf("main_pid = %d\n", getpid()); pthread_join(id, NULL); 0を返します。 } 結果: 結論は:どのスレッドがフォークされるかによって、フォーク後に作成された子プロセスはこのスレッドをメインスレッドとして使用し、このスレッドの後のコードを実行します。 Linux のマルチスレッドにおけるフォークに関するこの記事はこれで終わりです。Linux のマルチスレッド フォークに関する関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: CSS3 における擬似クラスの一般的な使用法の詳細な説明
オーバーレイネットワーク分析組み込みのホスト間ネットワーク通信は、常に Docker の待望の機能で...
この記事の例では、マウスに従ってボールを動かすjsの具体的なコードを参考までに共有しています。具体的...
<br />テキストデザインでは、通常、テキストのレイアウト、つまりテキストをより美しく...
1. COUNT(*) と COUNT(COL) COUNT(*)は通常、主キーに対してインデックス...
自動検出を行う際には、ポートなどの情報を取得してjson形式で返すスクリプトが必ず存在します。Red...
目次1. RegExpオブジェクト2. 文法2.1 定義2.2 修飾子2.3 角括弧2.4 メタ文字...
一言で言えば、大手メーカーからクラウド サーバーを購入する場合は、セキュリティ グループに移動して、...
この記事の例では、ストップウォッチタイマーを実装するためのJSの具体的なコードを参考までに共有してい...
目次1. システム監視2. ファイル操作3. ネットワーク通信4. システム管理仕事で必要なLinu...
この記事では、Web デザインの達人がよく使用するレスポンシブ フレームワーク (概要) を紹介し、...
<br />前の記事:Webデザインチュートリアル(5):Webビジュアルデザイン。 1...
Tomcat CentOS インストールこのインストール チュートリアルでは、次の内容について説明し...
MySQL の運用と保守において、R&D の同僚が 2 つの異なるインスタンスのデータを比較...
最初のステップ: VMwareで、「編集」-「仮想ネットワークエディタ」をクリックします。下図に示す...
はじめに: この記事ではreact-native-cliで作成したサンプル プロジェクト (Andr...