调用 execv 后的奇怪行为
Weird behaviour after calling execv
我正在尝试使用 execv 执行命令。在 运行 这个程序之后,我可以看到语句 "Going to call execv!" 被打印在标准输出上。
我还可以看到程序 "leaky" 的打印件。实际上一切都按预期工作,除了我在 if 或 else 块中看不到打印语句,即 "execv failed! error: " 和 "Successfully executed 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;
}
如果您得到 valgrind 的输出,那么显然 execve
是成功的。如果 execve
成功,它会用要启动的进程映像替换当前进程映像,而不是 return。如果 execve
returns 那么它失败了。
我正在尝试使用 execv 执行命令。在 运行 这个程序之后,我可以看到语句 "Going to call execv!" 被打印在标准输出上。
我还可以看到程序 "leaky" 的打印件。实际上一切都按预期工作,除了我在 if 或 else 块中看不到打印语句,即 "execv failed! error: " 和 "Successfully executed 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;
}
如果您得到 valgrind 的输出,那么显然 execve
是成功的。如果 execve
成功,它会用要启动的进程映像替换当前进程映像,而不是 return。如果 execve
returns 那么它失败了。