質問:プログラムにメイン スレッドが 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 における擬似クラスの一般的な使用法の詳細な説明
目次基本的な概要GTIDをオンラインで有効にする1. GTID検証ENFORCE_GTID_CONS...
今日、研究室のプロジェクトを見ていたとき、私にとって「難しい」問題に遭遇しました。実は、それは私があ...
最近、「フロントエンドキャッシュ」という新しい要件が作成されました要件背景: フォームへの高頻度の繰...
mysqlのリモートアクセス権を有効にするデフォルトでは、MySQL ユーザーにはリモート アクセ...
目次1. コンポーネントの登録1.1 グローバル登録1.2 グローバルコンポーネントの登録プロセス1...
第二に、キーワードのランキングは、Webページの表示速度にも関係しています(参照:キーワードランキン...
コンテナのIPアドレスを表示するdocker examine <コンテナ名またはID> ...
数十 MB 程度の小さいものから 1G 以上の大きいものまで、ビデオ ファイルなどのファイルのアップ...
1. コマンドの紹介nl (行数) は指定されたファイルに行番号を追加し、標準出力に書き込みます。フ...
目次アプレットのソースコードはどこにありますか? PC ミニプログラムはどのように暗号化されますか?...
1. ファイアウォールの基本的な使い方起動する: systemctl は、firewalld を起動...
マウスをホバーすると画像が折りたたまれる効果を実現する CSS 1. 実施のポイント折り畳みは複数の...
リソースを節約するためにWebページの圧縮を設定する1.まず、設定を変更しましょう vim /usr...
まず、変更イベントは 1 つだけです。 changelevel() //値を選択選択を変更して行の値...
フォームを作成するときに、名前、携帯電話番号、出生地などの 2 つのフィールドを揃える状況に遭遇する...