Код:
static void child() {
char* args[] = {"/bin/echo", "Hello World!", NULL};
printf("I'm child! My PID is %d.\n", getpid());
fflush(stdout);
execv("/bin/echo", args); // !!
err(EXIT_FAILURE, "execv() failed");
}
static void parent(__pid_t pid_c) {
printf("I'm parent! My PID is %d and my child's PID is %d.\n", getpid(), pid_c);
exit(EXIT_SUCCESS);
}
int main() {
__pid_t ret;
ret = fork();
if (ret == -1) {
err(EXIT_FAILURE, "fork() failed");
} else if (ret == 0) {
child();
} else {
parent(ret);
}
err(EXIT_FAILURE, "Shouldn't reach here");
}
Результат:
I'm parent! My PID is 4543 and my child's PID is 4544.
I'm child! My PID is 4544.
В приведенном выше коде я хочу заменить процесс child
на процесс /bin/echo
, но echo
не работает. Точнее, вызов execv()
не удался.
В чем проблема?