forkとexecの使い方について – プログラミング – Home

forkとexecの使い方について
 
通知
すべてクリア

[解決済] forkとexecの使い方について


クラリス
 クラリス
(@クラリス)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

初めて質問させていただきます。
クラリスと申します。
環境は、Linuxでgcc(2.95)を使っています。
質問の内容はタイトルのとおり、
forkを使ったexecの使用方法です。

[a.out]プログラム
void main(){
while(1){
// 何かの処理…X
}
}

void main(){
if ( fork() == 0 ){
execl(a.out, (char*)0);
}
while(1){
// 別の処理
}
}

上記の方法で子プロセスを作って別々に処理をしたいのですが、「X」の内容によって正常に処
理が行われない時があります。それはなぜなのでしょうか?

ご教授ください。よろしくお願いします。


引用未解決
トピックタグ
ボコノン教徒
 ボコノン教徒
(@ボコノン教徒)
ゲスト
結合: 23年前
投稿: 90
 

#ここ(VC++のコーナー)でUnixのfork()について質問されてもなあ。
普通こう使うらしいのだが...
int pid;
pid = fork();
if ( pid == -1 ){
エラー

} else {

if ( pid == 0 ){

子プロセス

} else {

親プロセス

}

}


返信引用
ボコノン教徒
 ボコノン教徒
(@ボコノン教徒)
ゲスト
結合: 23年前
投稿: 90
 

#また間違っておくってしまった

こんな感じになるんじゃないの?

void main(){
int pid = fork();
if ( pid== -1 ){
// Error
} else {
if (pid==0){//子プロセス
while(1){
// 何かの処理…X
}
} else {// 親プロセス
while(1){
// 別の処理
}
}
}
}
execlする理由は?


返信引用
クラリス
 クラリス
(@クラリス)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

あ、すいません…(@_@)
VC++,C/C++の質問掲示板と書いてあったので、質問可能と思って質問させてもらったのです
が…ここは、UNIXのCは駄目だったんですね。申し訳ありません。

結論としては、私が行おうとしている事は正しいと言う事ですね…
正常に処理されないのは、子プロセスで使用している処理に問題がありそうだという事になりそ
うです。
ボコノン教徒さん、ご回答ありがとうございます。


返信引用
クラリス
 クラリス
(@クラリス)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

ああ…返事が遅れてしまいました。
>execlする理由は?
execlするファイルはサーバー機能を持った実行ファイルだからなのです。

度々ご回答ありがとうございます。


返信引用
ボコノン教徒
 ボコノン教徒
(@ボコノン教徒)
ゲスト
結合: 23年前
投稿: 90
 

> UNIXのCは駄目だったんですね。申し訳ありません。

一般的なC/C++の話題はOKなんですが、UNIX特有の話題を投げられても
答えられる人が「年寄り」に限られちゃうので。

> execl(a.out, (char*)0);

これ、正常に動いてます?
a.outの起動に失敗すると、その下の同じWhileループが
同時に実行されちゃいますけど。


返信引用
クラリス
 クラリス
(@クラリス)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

a.outは正常に起動しています。psコマンドで確認しました。


返信引用
ボコノン教徒
 ボコノン教徒
(@ボコノン教徒)
ゲスト
結合: 23年前
投稿: 90
 

execlはChain(元プロセスは終了してしまう)ですよね。

となると、
while(1){
// 何かの処理…X
}

while(1){
// 別の処理
}
が何やってるの?、と言う話になるのだけど、
具体的なコードが示されてないので、
 同じリソースにアクセスする時に排他処理はやってる?
というアドバイスぐらいしかできません。


返信引用
クラリス
 クラリス
(@クラリス)
ゲスト
結合: 22年前
投稿: 5
Topic starter  

ご回答ありがとうございます。
親プロセス側がキー入力待ち、子プロセスが状態表示等をやっています。
そのようなコンソール状態だと表示も制御もおかしくなるので、
とりあえず、別々に起動することにします。

色々とアドバイスありがとうございました。m(__)m


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました