• ベストアンサー

子プロセスと親プロセス

ある本を読んでいると、以下のような問いにぶち当たり、プログラムの仕方がよくわからないのです。 自分でもいろいろ調べたのですが、わからないので質問させていただきます。 自分のプロセス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); }

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

showpid.c では単に、getpid() と getppid() の結果を出すだけでいいです。それをコンパイルすればコマンドが出来ます。 メインのプログラムでは、こんな感じで。 for(10回ループ) if(fork()==0) execv(showpidコマンド)

candy_chai
質問者

お礼

出来ました。ありがとうございました。

その他の回答 (2)

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.3

質問の意図が分かりづらいんですがexecの使い方が分からないというよりは 単純に自分自身をループで呼ぶと無限ループになってしまうので どうすればいいかわから無いってことじゃないかと思ったんですが私の深読みしすぎですかね? 一応書くと単純に起動オプション判定するのが楽かと思いますが main(int argc, char *argv[ ]) って感じで パラメータ無いときはそのままでexecのときは ループカウント渡せばいけると思います

candy_chai
質問者

お礼

ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

OK, じゃあ exec が何をするものなのか書いてもらおうじゃないか.

candy_chai
質問者

お礼

引数に書いてあるプログラムを子プロセスに実行させるものだと思ってたんですけど違うのですか?

関連するQ&A