私はexecveコマンドに少し問題があります。プログラムTestは2つの子を作成し、それぞれがexecveを実行して別のプログラムをロードして実行する必要があります。しかし、私は両方のexecveに悪いアドレスを取得しています。次のようにコードは次のとおりです。Execveが悪いアドレスを与えています
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <errno.h>
#include <time.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(){
int child_1, child_2;
child_1=fork();
if(child_1==0){
char* argv[]={"Test", "Test_1", "NULL"};
if((execve("Test_1", argv, NULL))<0) perror("execve 1 fail");
exit(0);
}else if(child_1<0)perror("error fork");
else wait(NULL);
child_2=fork();
if(child_2==0){
char* argv1[]={"Test", "Test_2", "NULL"};
if((execve("Test_2", argv1, NULL))<0) perror("execve 2 fail");
exit(0);
}else if(child_2<0)perror("error fork");
else wait(NULL);
return 0;
}
エラーは*それ自体では発生しませんが、第2子をフォークする前に最初の子を待っていることは疑いありません。 2人の子供が逐次実行されることを意図している場合、それはそれを行う方法に過ぎませんが、同時に実行するつもりなら、両方の子供をフォークした後まで待つべきではありません。 –
チップをありがとう。それは同時に動作するはずですので、私はあなたが提案したものを試してみます。 – Leo