- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
#include <unistd.h>
main()
{
int i=0;
char *cmd[] = { "ls", "-l", (char *)0 };
char *env[] = { "HOME=/usr/home", "LOGNAME=home", (char *)0 };
int rr;
for(i; i<6; i++)
{
switch(rr=fork())
{
case -1:execl ("/bin/ls", "ls", "-1", (char *)0);break;
case 0:execle ("/bin/ls", "ls", "-l", (char *)0, env);break;
case 1:execlp ("ls", "ls", "-l", (char *)0);break;
case 2:execv ("/bin/ls", cmd);break;
case 3:execve ("/bin/ls", cmd, env);break;
case 4:execvp ("ls", cmd);break;
}
}
}
- Ну это работают.
И проверяющий поставил плюс.
1. Дочерний процесс нормально создаётся и вызывает ls -l.
2. fork по каким-то непонятным причинам умудряется завершиться с ошибкой, и тогда уже родительский процесс вызывает ls -1.
А в каком случае fork вообще может вернуть 1-4? Где вы видели ОС, дающую пользовательским процессам такие PID?
PID TTY TIME CMD
1 ? 00:00:01 init
2 ? 00:00:00 kthreadd
3 ? 00:00:12 ksoftirqd/0
6 ? 00:00:00 migration/0
Ну хорошо, создаст он шесть дочерних процессов ls, только зачем?
И тут приходит C99...