Ошибка системного вызова execlp()

Это очень простой пример системного вызова exec(). Здесь я пытаюсь дважды вызвать execlp(). Но я не получаю исключение. Он показывает вывод только для первого вызова с текущим каталогом.

#include <stdio.h>
#include <unistd.h>

int main() { 

 int ret1,ret2;
 ret1 = execlp( "pwd", "pwd", (char *) 0);
 ret2 = execlp( "date", "date", (char *) 0);
 return 0;
}
</unistd.h></stdio.h>

ВЫВОД:

/home/aniket

Здесь я не вижу выход для даты. Может кто-нибудь объяснить, почему это происходит?

3 ответа

execlp() заменяет текущий образ процесса новым образцом процесса. Он не возвращается (если не возникла ошибка при запуске нового процесса).

Поэтому второй вызов execlp() никогда не достигается.


execlp() заменяет процесс, вызвавший его процессом, который был вызван.

По этой ссылке:

"Семейство функций exec() заменяет текущий образ процесса новым образцом процесса".

Чтобы сохранить оба процесса, используйте fork().


#include <stdio.h>
#include <unistd.h>

int main() { 

 int ret1,ret2;

 pid_t chd;
 chd=fork(); 
 if(chd==0)
 ret1 = execlp( "pwd", "pwd", (char *) 0);
 else if(chd>0)
 ret2 = execlp( "date", "date", (char *) 0);
 return 0;
}
</unistd.h></stdio.h>

licensed under cc by-sa 3.0 with attribution.