我编写了一个小程序来测试我对fork / exec / wait的了解,但程序表现得非常奇怪。这是程序:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main() {
pid_t child = fork();
if(child != 0) {
printf("this is the parent\n");
int status;
waitpid(child, &status);
return status;
}
else {
char* const args[] = {"/bin/echo", "hi"};
execv("/bin/echo", args);
}
}
我看到的输出是:
this is the parent
hi 0 0
0 1
这些0和1是我的Linux终端上显示的一个字符。我已经尝试在每个字符串的末尾显式添加\ 0,但这似乎没有改变任何东西。
有谁知道为什么我会看到这些额外的角色?
答案 0 :(得分:3)
您必须使用args
终止NULL
数组:
char* const args[] = {"/bin/echo", "hi", NULL};
否则echo
不知道在哪里停止阅读其论点。