Системный вызов fork () может возвращать три разных состояния: сбой (<0), родительский процесс (> 0) или дочерний процесс (== 0). Вы должны правильно проверить возвращаемое значение.
int pid = fork();
if (pid < 0) {
/* handle error */
perror("fork");
exit(1);
} else if (pid > 0) {
/* parent code */
} else {
/* child code */
}
Ваш системный вызов execl () неверен. Первый аргумент - это путь к программе, которую вы хотите выполнить, «./» недопустим, это должно быть как минимум «./dummy». Следующим аргументом является условное имя команды (argv [0] в исполняемой программе), которое может быть повторением первого аргумента. Итак:
execl("./dummy", "dummy", NULL);
Также обратите внимание, что оператор printf("*")
в дочерней программе, вероятно, буферизуется, и вы ничего не увидите в терминале. Вы должны либо добавить «\ n» в конец, либо вызвать fflush(stdout)
, чтобы очистить стандартный вывод.