1

我已经搜索了很多,但我仍然没有答案。我有一个程序通过询问用户所需的命令来创建其他进程,然后我使用 execlp 打开这个新进程。我想知道是否有一种简单的方法可以让父进程找出命令是否已执行,或者接收到的命令是否不存在。

我有以下代码:

if (executarComando(comando) != OK)
   fprintf(stderr,"Nao foi possivel executar esse comando. ");

其中 executarComando 是:

int executarComando(char* cmd) {
if ( execlp("xterm", "xterm", "-hold", "-e", cmd, NULL) == ERROR) // error
    return ERROR;
return OK;
}
4

2 回答 2

1

没有简单的方法;一个经常使用的约定是fork()ed child 将在失败的特定情况下报告错误和exit(-1)(或) ,并且大多数命令避免将其用于自己的失败模式。exit(255)exec()

于 2012-04-15T21:49:11.360 回答
1

你的问题是你execlp总是成功;它正在运行xterm,而不是您传递给 shell 的命令xterm运行。你需要在你的程序和这个 shell 之间添加某种通信通道,以便你可以反馈成功或失败。我会做一些事情,比如用

( command ) 99>&- ; echo $? >&99

然后,在 fork 调用之前打开一个管道execlp,并在 child 中,使用dup2创建为文件描述符编号 99 对应于管道的写入端。现在,您可以通过管道读回命令的退出状态。

只是希望xterm不要关闭您的所有文件描述符;否则你就不走运了,你必须mkfifo在文件系统的某个地方创建一个临时的 fifo (via) 才能获得相同的结果。

请注意,数字 99 是任意的;0、1 或 2 以外的任何值都应该有效。

于 2012-04-16T00:44:41.307 回答