したがって、代入の場合、特に&コマンドライン演算子をエミュレートするシェルを作成する必要があります。
フォーク/実行が停止しました。問題は、WNOHANGでwaitpidを呼び出すと、execvが終了した後にプログラムがハングすることです。Enterキーを押すと、プロンプトが戻り、プログラムは通常どおり動作します。これは、waitpidがブロックされている場合には発生しないことに注意してください。
関連するコードは次のとおりです。
782 pid_t child = fork(); //Create child process
783
784 char** charArgs = toCharMatrix(*args);
785
786 //If creation failed, say so
787 if(child == -1) {
788 fprintf(stderr, "Error: Could not create child process.\n");
789 return -1;
790 }
791 else if(child == 0) { //else: child process code
792
793 //If the given command can be executed, attempt to exectue it
794 if(access(charArgs[0], X_OK) == 0)
795 execv(charArgs[0], charArgs);
796 else { //Else tell the user that they are an idiot
797 fprintf(stderr, "%s is not a valid path.\n", charArgs[0]);
798 return -1;
799 }
800
801 _exit(0);
802 }
803 else
804 waitpid(-1, NULL, WNOHANG);
最後のelseステートメント(親プロセスコード)で、returnから基本的に何にでも多くのことを試しました。何も役に立たないようです。繰り返しになりますが、WNOHANGオプションを削除するだけで問題は解決しますが、割り当て仕様に準拠していません。
waitpid(-1、NULL、WNOHANG);も呼び出します。ゾンビの子を避けるために、プロンプトが表示される直前のマスターループで。この愚かなキャリッジリターンの問題は、残っている唯一の問題です。前もって感謝します。