我搜索了很多,但我仍然没有答案。我有一个程序,通过询问用户所需的命令来创建其他进程,然后我使用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;
}
答案 0 :(得分:1)
没有琐碎的方式;经常使用的约定是fork()
ed孩子将在exit(-1)
失败的特定情况下报告错误和exit(255)
(或exec()
),并且大多数命令都避免使用对于他们自己的失败模式。
答案 1 :(得分:1)
你的问题是你的execlp
总能成功;它正在运行xterm
,而不是您传递给shell xterm
的命令。您需要在程序和此shell之间添加某种通信通道,以便您可以回复成功或失败。我会做一些事情,比如用
( command ) 99>&- ; echo $? >&99
然后,在分叉前调用execlp
打开管道,在子代中,使用dup2
创建对应于管道写入端的文件描述符编号99。现在,您可以通过管道读回命令的退出状态。
希望xterm
不会关闭你的所有文件描述符;否则你运气不好而且你必须在文件系统的某个地方制作一个临时的fifo(通过mkfifo
)以获得相同的结果。
请注意,数字99是任意的;除0,1或2以外的任何东西都应该有效。