質問:「複数プロセスでアプリケーションを作る場合い、各プロセスが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)
- メッセージキュー
なども解説できますよ!やってみます?