- ベストアンサー
子プロセスと親プロセス
ある本を読んでいると、以下のような問いにぶち当たり、プログラムの仕方がよくわからないのです。 自分でもいろいろ調べたのですが、わからないので質問させていただきます。 自分のプロセスIDと親のプロセスIDのプロセスIDを表示するコマンドshowpidを作り、showpidを子プロセスとして10回実行するプログラムを作りなさい。ただし、execを用いてshowpidを10回実行すること。 というものなのですが、自分のプロセスIDと親のプロセスIDの表示方法はわかったのですが、それをコマンドとして作り、子プロセスとして10回実行する方法がわからなくて困っております。。。 言語はc言語を使ってもらいたいです。以下に自分のプロセスIDと親のプロセスIDを表示するプログラムを付けときます。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int main(){ pid_t pid; int status; if((pid=fork())==0) printf("I am a child with pid=%d. My parent pid is %d.\n",getpid(),getppid()); else{ wait(&status); exit(EXIT_SUCCESS); }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
showpid.c では単に、getpid() と getppid() の結果を出すだけでいいです。それをコンパイルすればコマンドが出来ます。 メインのプログラムでは、こんな感じで。 for(10回ループ) if(fork()==0) execv(showpidコマンド)
その他の回答 (2)
- koi1234
- ベストアンサー率53% (1866/3459)
質問の意図が分かりづらいんですがexecの使い方が分からないというよりは 単純に自分自身をループで呼ぶと無限ループになってしまうので どうすればいいかわから無いってことじゃないかと思ったんですが私の深読みしすぎですかね? 一応書くと単純に起動オプション判定するのが楽かと思いますが main(int argc, char *argv[ ]) って感じで パラメータ無いときはそのままでexecのときは ループカウント渡せばいけると思います
お礼
ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
OK, じゃあ exec が何をするものなのか書いてもらおうじゃないか.
お礼
引数に書いてあるプログラムを子プロセスに実行させるものだと思ってたんですけど違うのですか?
お礼
出来ました。ありがとうございました。