我正在寻找一种方法来确定函数execvp是成功还是失败。我知道如果它返回然后它失败了,但我正在寻找从execvp启动的命令失败的情况。例如在" ls"正试图列出一个不存在的文件夹。由此我计划添加对逻辑运算符的支持(例如&&,||)。感谢。
public function reports($service, $accountId, $adClientId,$adsense)
{
$startDate = '2015-10-01';
$endDate = 'today';
$optParams = array(
'metric' => array('PAGE_VIEWS',
'CLICKS',
'COST_PER_CLICK',
'EARNINGS'
),
'dimension' => 'DATE',
'sort' => '-DATE',
'filter' => array(
'CUSTOM_CHANNEL_ID==XXXXXXXXX'
),
);
$report = $service->accounts_reports->generate($accountId,$startDate,$endDate, $optParams);
return $report;
答案 0 :(得分:3)
您需要先fork()
一个新流程,然后让新流程调用execvp
。然后,父进程应调用wait()
,这将允许它检索您运行的命令的退出状态(在这种情况下为ls
)。
检查从wait()
检索的退货状态时,请务必使用WIFEXITED()
确保孩子正常退出,并使用WEXITSTATUS()
提取退出状态。
pid_t pid = fork();
if (pid == -1) {
perror("fork failed");
exit(1);
} else if (pid == 0) {
execlp("/bin/ls","ls","-l","xyz",NULL);
perror("exec failed");
exit(1);
} else {
int status;
pid = wait(&status);
if (WIFEXITED(status)) {
printf("pid %d exited with status %d\n", pid, WEXITSTATUS(status));
} else {
printf("pid %d exited abnormally\n"
}
}