调用execv后的奇怪行为

时间:2017-02-07 05:19:47

标签: c linux execv

我正在尝试使用execv执行命令。运行这个程序后,我可以看到声明"去打电话给execv!"正在打印在标准输出上。

我还可以看到程序中的打印件"漏水"。实际上一切都按预期工作,除了我在if或else块中看不到打印语句,即" execv都没有失败!错误:"也没有"成功执行了valgrind!"正在打印输出。

我在这里错过了一些关于execv的明显观点吗?

#include<stdio.h>
#include<errno.h>
#include<string.h>
#include<unistd.h>

int main()
{
   char *args[5] = {"/usr/bin/valgrind", "--leak-check=full", "--log-file=valgrindReport.txt", "./leaky", NULL};
   printf("Going to call execv!\n");
   if(execv("/usr/bin/valgrind", args) < 0)
   {
      printf("execv failed! error: %s\n", strerror(errno));
      return 0;
   }
   else
   {
      printf("Successfully executed valgrind!\n");
   }
   return 0;
}

1 个答案:

答案 0 :(得分:5)

如果你得到valgrind的输出,那么显然execve成功了。如果execve成功,则将当前过程映像替换为要启动的过程映像,并且不返回。如果execve返回则失败。