次のような一連のプログラムがあります。
C++ プログラム「A」は、bash スクリプトを起動する別の C++ プログラム「B」を起動します。
bash スクリプトを起動するために、以下を使用しています。
int returnVal = system("pathToScript/myScript.sh");
ログ ファイルでスクリプトの出力を確認できるので、確実に実行されています。
問題は、スクリプトが何を返しても returnVal が常に -1 であることです。スクリプトに「exit 3」をハードコーディングしましたが、システム コールを介して起動すると、依然として -1 の returnVal が返されます。
ターミナルでスクリプトをスタンドアロンで実行し、「$?」をエコーします。予想どおり、戻り値 3 が表示されます。
では、C++ プログラムのチェーンを実行すると、終了コードが壊れるのはなぜですか? これを回避する方法はありますか?
編集- perror を使用すると、「子プロセスがありません」というエラー メッセージが表示されます。
編集- 別の方法として、fork/exec/wait を使用してスクリプトを実行しようとしていますが、182、56、163、62、51 などのランダムな終了コードを取得しています...以下のコード:
pid_t pid = vfork();
switch (pid)
{
case -1:
cout << "Failed to fork." << endl;
case 0: // Child process
cout << "Child process launched!" << endl;
execl("/pathToScript/myScript.sh", "/pathToScript/myScript.sh", "someArgument", NULL);
cout << "execl call failed." << endl;
exit(0);
default:
int status;
cout << "Waiting for process to complete..." << endl;
waitpid(pid, &status, 0); // Wait for the process to complete.
cout << "Process exited with status: " << WEXITSTATUS(status) << endl;
}
ここでランダムな終了ステータスが表示されるのはなぜですか?
アドバイスをいただければ幸いです。ありがとう!