1

以下のコードを実行し、プロンプトで「ls」と入力すると、ターミナルで ls が実行されますが、そこに座ってプロンプトが再度表示されません。親プロセスに戻るための制御を取得するにはどうすればよいですか?

ありがとう

#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char* argv[]){
    while(1){
        print_the_prompt();
        char user_text[100];
        if( fgets(user_text, sizeof(user_text), stdin) != NULL ){
            char* nl_char = strchr(user_text, '\n');
            if( nl_char != NULL ){
                *nl_char = '\0';
            }
        }

    //printf("user_text = \"%s\"\n", user_text);

        if( is_command_built_in(user_text) ){
            //run built in command
        }
        else{
            //run regular command
            execute_new_command(user_text);
        }
    }

    return 0;
}

void print_the_prompt(){
        printf("!:  ");
}

int is_command_built_in(char* command){
    return 0;
}

void execute_new_command(char* command){
    pid_t pID = fork();
    if(pID == 0){
        //is child
        char* execv_arguments[] = { command, (char*)0 };
        execvp(command, execv_arguments);
    }
    else{
        //is parent
        printf("im done");
    }
}
4

1 に答える 1

1

答えはおそらく、親が子を起動した直後に "im done" を出力し(これは別のプロセスであるため、並行して実行されることに注意してください)、子がファイルの一覧表示を開始する前にプロンプ​​トを出力するためにループバックします。スクロールして戻ると、おそらく次のプロンプトが表示されます。

子が終了するまで親を待機させるには、wait()一連の関数のいずれかを使用する必要があります。

于 2011-09-28T02:15:32.427 に答える