A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
下記のお答え。
んんんと、それだと最後に作成されたプロセスで、forkの戻り値が0なので、ifを通らないままforを抜けて、何もしないプロセスになってしまうような・・・。
for(n = 0; n < 2; n++){
if(pid[n] = fork) break;
}
switch(n){
case文で0~3 (←3までであることに注意)
}
とすると、forループを抜けた時点で、
(1) nに0が入っている、親プロセス
(2) nに1が入っている、(1)プロセスに作られた子プロセス
(3) nに2が入っている、(2)プロセスに作られた子プロセス
(4) nに3が入っている、(3)プロセスに作られた子プロセス
ができます。
どういう経緯をたどるかというと、
(1) 親プロセスはn=0をセットし、forkの戻り値にIDが入るのでブレーク、forを抜けたあとのnは0。
(2) n=0のループでforkを呼び出した時点でプロセスが複製され、forkの戻り値が0なので、ブレークせずにnがインクリメントされn=1に。そしてforkを呼び出し、プロセスIDが返り、真なのでブレーク、forを抜けたあとのnが1。
(3) n=1のループでforkを呼び出した時点でプロセスが複製され、forkの戻り値が0なので、ブレークせずにnがインクリメントされn=2に。そしてforkを呼び出し、プロセスIDが返り、真なのでブレーク、forを抜けたあとのnが2。
(4) n=2のループでforkを呼び出した時点でプロセスが複製され、forkの戻り値が0なので、ブレークせずにnがインクリメントされn=3に。そしてn>2なのでループを抜け、forを抜けたあとのnが3。
というわけでforを抜けたあとswitchで判別するといいと思います。
これは自分でやったことであり、参考書とかを見たわけではないので、これが一番正しいとは言えないのですが、動作はしました、perl上ですが(笑)。
でもどの言語でも同じだと思います。
ちなみにperlではpid[n]には、あとのプロセスのIDは格納されません。
たとえばn=0のプロセスではpid[1]は入っていませんでした。
どうやら、複製されたプロセスで、変数は共有されていないようです。
もちろん、この部文はほかの言語でどうなるかわかりませんが。
if(!(pid[n]) = fork()) break;
とすると、いちばん最初のプロセス(n=0)だけのpid[n]にすべてのプロセスIDが格納されました。
プロセスを作成するのは最初のプロセスだけですから。
長くなりました。
参考になれば嬉しいです。
No.2
- 回答日時:
forkはこれを呼び出した時点で、そのプログラムのメモリ内容をすべてコピーしたプロセスの複製を作ります。
ただし、1つだけ違う個所があります。
それはforkの戻り値です。
間違えやすい例を。
fork();
fork();
1個目のforkで2つのプロセスに別れ、その2つが2個目のforkを呼び出すので結果4つできてしまう。
for(n = 0; n < 2; n++){
if(fork()) break;
}
というふうにやると、子プロセスが2つできます。
ちなみに、Cの質問なのかシェルスクリプトの質問なのかわからなかったので、言語は適当です。
適当に解釈してください。
この回答への補足
分かり易い例を書いて頂いてありがとうございます。
下記の様につくればよいのでしょうか?
pid_t pid[2];
for(n=0;n<2;n++){
if(pid[n] = fork()){
switch(n){
case 0:
処理A(system("他に作成したプログラム")等)
break;
case 1:
処理B
break;
default:
break;
}
break;
}
}
分かり易い例を書いて頂いてありがとうございます。
下記の様につくればよいのでしょうか?
pid_t pid[2];
for(n=0;n<2;n++){
if(pid[n] = fork()){
switch(n){
case 0:
処理A(system("他に作成したプログラム")等)
break;
case 1:
処理B
break;
default:
break;
}
break;
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 政治 私は文部科学省ヘ入り込んで投稿した私の建議文を彼らが私の依頼まましましょうか。? 2 2023/08/22 07:08
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- 宗教学 キリスト教の聖書の教え方について、悩みがあるので、感想アドバイスなどよろしくお願いします。 『一足飛 28 2023/06/20 02:08
- 高校 極限公式 2 2022/12/08 02:17
- 環境学・エコロジー 二酸化炭素の排出 1 2023/08/07 16:40
- その他(教育・科学・学問) 「技術(テクノロジー)」と「工学(エンジニアリング)」の違いについて 5 2023/02/03 09:54
- 工学 PID制御 1 2022/07/27 11:50
- CPU・メモリ・マザーボード 今のCPUは2nmプロセスとか何やらで製造されているかと思いますが、このスケールをどんどん大きくして 3 2023/06/07 20:34
- 数学 論理 数学 ∃について 添付の問題がよくわかりません。 例えば1題目、∃xとあったらまず何を考えるの 3 2022/07/09 21:13
- 哲学 真実の信仰=真理の探究 1 2022/11/26 09:03
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
怪しいプロセス教えてください。
-
プロセスハンドル or ウインド...
-
C言語 特定のプロセスの終了を...
-
Windowsでのfork方法
-
vb.netでEXCEL起動がうまくでき...
-
起動中の他のプログラム(orプ...
-
プロセスIDからウィンドウハ...
-
バックグラウンドのプロセスの...
-
VB.NETで起動したExcelの閉じ方...
-
プロセスIDの取得方法について
-
Windows7アプリケーションのプ...
-
プロセスIDの再利用
-
remove関数(?)でプロセスが停...
-
ShellExecuteExでハンドルの取得
-
conime.exeってウイルスですか?
-
ShellExecuteが起動したプロセ...
-
Macターミナルで実行中のプログ...
-
家電製品の電力周波数を変える機械
-
sendkeysにてALT+CTRL+INSERTを...
-
電車のドアの前での並び方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
Process.Startの戻り値を後で取得
-
プロセスのアタッチ・デタッチ...
-
タスクマネージャーのプロセス...
-
C#でのbatファイル実行結果取得
-
ADOでアクセスのレコードに...
-
プロセスIDの取得方法について
-
explorer.exeが異様にメモリを食う
-
セマフォとmutexの違いは?
-
Windowsでのfork方法
-
プロセスIDからウィンドウハ...
-
VB6.0 SHELLで起動...
-
OSPFでプロセスを分ける意義に...
-
非表示になったエクセルは?
-
ウィンドウのタイトルからプロ...
-
怪しいプロセス教えてください。
-
シェルで親プロセス終了時に子...
-
【C#】別プロセスがロックか...
-
API関数 GetExitCodeProcess
-
Linuxでのスレッド間メッセージ...
おすすめ情報