我有一个程序链如下:
C++ 程序“A”启动另一个启动 bash 脚本的 C++ 程序“B”。
要启动 bash 脚本,我正在使用:
int returnVal = system("pathToScript/myScript.sh");
我可以在我的日志文件中看到脚本的输出,所以它肯定正在执行。
问题是,无论脚本返回什么,returnVal 始终为 -1。我什至在脚本中硬编码了一个“退出 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;
}
为什么我在这里得到随机退出状态?
感谢任何建议。谢谢!