exec
функции не просто выполнят вашу команду.Они на самом деле заменят контекст выполнения процесса выбранным вами исполняемым файлом (в вашем случае /bin/ls
).
Другими словами, поскольку функция ls
завершается завершением своего процесса (через 'exit' иливозвращая основную функцию или что-либо еще), ваш дочерний процесс будет уничтожен в конце выполнения ls
.
Вы можете фактически использовать этот вызов printf для печати некоторых ошибок, например:
if(pid==0)
{
printf("\nI am the child\n");
execlp("/bin/ls","ls",NULL);
printf("\nError: Could not execute function %s\n", "/bin/ls");
_exit(0); //make sure you kill your process, it won't disappear by itself.
}