0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

複数プロセスのアプリケーション

Last updated at Posted at 2025-04-25

質問:「複数プロセスでアプリケーションを作る場合い、各プロセスがmain()を持つことになりますか?」
以下はChatGPTの回答。


はい、まさにその通りです!


■ 結論

複数プロセスでアプリケーションを構成する場合、各プロセスは main() 関数を持ちます。


■ 詳しく説明すると:

【プロセス】=【1つの独立した実行ファイル】

  • それぞれが 独立した実行体(バイナリ) なので、
  • 当然、それぞれ main() を持ちます。

例:2つのプロセスから成るアプリ

[プロセスA:センサ取得プログラム]
main_sensor.c → main() がある

[プロセスB:表示UIプログラム]
main_display.c → こちらも main() がある
  • どちらも別々に gcc でビルドして別バイナリとして実行します。
gcc -o sensor main_sensor.c
gcc -o display main_display.c
./sensor &
./display

■ じゃあ「1つのソースファイルで複数プロセス」は?

C言語で fork() を使う方法です。

#include <unistd.h>
#include <stdio.h>

int main() {
    pid_t pid = fork();

    if (pid == 0) {
        // 子プロセス
        printf("子プロセスです\n");
    } else {
        // 親プロセス
        printf("親プロセスです\n");
    }
    return 0;
}

この場合は 1つのmain()からプロセスを複製します。
つまり、「プロセスは2つ」ですが「main()は1つ」です。


■ 要するに

方法 main() の数 備考
複数のバイナリを使う(正攻法) 各プロセスに1つずつ プロセス設計が明確で保守しやすい
fork() でプロセス分岐 1つだけ 手軽だが複雑な構成には向かない

■ 組込みLinuxでの例

  • センサ収集プロセスMQTT通信プロセス
  • UI描画プロセスログ収集プロセス

などに分けるのが一般的で、それぞれ**別バイナリ & 別 main()**を持ちます。


もし「複数プロセス間の通信方法(IPC)」にも興味があれば、

  • パイプ
  • ソケット
  • 共有メモリ(shm)
  • メッセージキュー

なども解説できますよ!やってみます?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?