| Цитата | 2)Запустить программу таким образом, чтобы после завершения она перешла в состояние zombie, а затем уничтожить zombie-процесс из командной строки shell.
|
Если родительский процесс не опросит состояние завершенного дочернего посредством wait[pid/id], то он (child) на время перейдет в состояние зомби. После завершения родительского процесса (точнее в do_exit()) - произойдет смена родителя для всех дочерних процессов (notify_parent()). Этим новым родителем будет либо процесс из группы процессов родителя или init, который периодически вызывает wait[pid/id] для освобождения ресурсов, которые занимают зомби-процессы
| Код | ... pid_t pid = fork();
if (pid > 0) _exit(0); /* Завершение родителя */ else if (pid < 0) _exit(errno);
/* Тут твоя программа, после ее завершения процесс перейдет в состояние зомби */ ...
|
| Цитата | Реализовать программу, осуществляющую порождение нескольких процессов, запуск ими некоторой программы, и ожидание их завершения. Число порождаемых процессов и имя программы указывается при запуске.
|
| Код | void call(int size, char* path) { pid_t pid;
int count = 0;
while (size--) { pid = fork();
if (pid == 0) {
if (strtok(path, "/") == NULL) execlp(path, path, NULL);
execl(path, path, NULL); } else if (pid > 0) ++count; } while (count--) waitpid(-1, NULL, 0); }
int main(int argc, char* argv[]) { if (argc != 3) return 1;
int size = atoi(argv[1]); /* Количество */ char* path = argv[2]; /* Программа */
call(size, path);
return 0; }
|
|