IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> freeBSD процесс-zombie
сообщение
Сообщение #1


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Подскажите как в системе исскуственно повесить зомби. Нигде не могу найти.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Программа создает 10 процессов-зомби:
#include <sys/types.h>                                            
#include <unistd.h>
#include <stdio.h>

int main()
{
int i;
for (i = 1; i <= 10; i++)
if (fork() == 0)
{
printf("Zombie process %d created.\n", i);
return 0;
}
puts("Press ENTER to close parent process...");
getchar();
return 0;
}

Если перед нажатием ENTER посмотреть в ps, то обнаружим 10 процессов в состоянии Z:
Код
$ ps                                  
  PID TT  STAT       TIME COMMAND    
21578 p0  Is+     0:00.25 -ksh (ksh)  
2947 p1  Is      0:00.99 -ksh (ksh)  
31163 p1  R+      0:00.00 ps          
$ parent                              
Zombie process 2 created.            
Zombie process 1 created.            
Press ENTER to close parent process...
Zombie process 3 created.            
Zombie process 4 created.            
Zombie process 5 created.            
Zombie process 6 created.            
Zombie process 8 created.            
Zombie process 9 created.            
Zombie process 10 created.            
Zombie process 7 created.            
^Z[1] + Suspended            parent  
$ ps                                  
  PID TT  STAT       TIME COMMAND    
21578 p0  Is+     0:00.25 -ksh (ksh)  
27795 p1  Z       0:00.00 (parent)    
8359 p1  Z       0:00.00 (parent)    
9088 p1  Z       0:00.00 (parent)    
23949 p1  Z       0:00.00 (parent)    
14734 p1  Z       0:00.00 (parent)    
1312 p1  Z       0:00.00 (parent)    
26772 p1  Z       0:00.00 (parent)    
22099 p1  Z       0:00.00 (parent)    
7346 p1  Z       0:00.00 (parent)    
20051 p1  Z       0:00.00 (parent)    
2947 p1  Is      0:01.00 -ksh (ksh)  
18621 p1  T       0:00.05 parent      
13552 p1  R+      0:00.01 ps          
$


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


хех, так просто ? А почему ихнее имущество не будет передано init ?


UPDATE
аа перед завершением программы нужно ps смотреть, я правильно понял ?
то есть после нажатия Enter они будут всетаки удалены из списка процессов ?


Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Цитата(klem4 @ 29.01.2008 15:40) *
аа перед завершением программы нужно ps смотреть, я правильно понял ?
то есть после нажатия Enter они будут всетаки удалены из списка процессов ?
Да, конечно - уничтожение родительского процесса всегда приводит к уничтожению дочерних. Проблема становится в полный рост, когда родительский процесс - демон.


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


к сожалению, все чего удалось добиться - поучить статусы RE для процессов ...


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Очень странно. Подробно опиши, что ты делал (желательно со скрином консоли).


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


да все по логике, как ты и посоветовал ... когда вылезает надпись press enter, скидываю основнной процесс ^Z и смотрю ps, пробовал также запускать программу в фоновом режиме, результат аналогичный.


Кстати, какой результат у тебя выдаст такой код:

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

int main(void) {

int i;
if (fork()) {
/* Родитель */
sleep(2);
_exit(0);
}
for (i=0; i < 5; i++) {
printf("My parent is %d\n", getppid());
sleep(1);
}
}


вот тут скорее ребенок должен стать зомби, но и в этом случае этого не происходит, информация о нем передается init -- PPID = 1

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Цитата(klem4 @ 31.01.2008 16:14) *
вот тут скорее ребенок должен стать зомби, но и в этом случае этого не происходит, информация о нем передается init -- PPID = 1
Не должен, т. к. он не завершен (из-за sleep пребывает в состоянии I). Зомби возможны только, если дочерний процесс завершен, а родительский продолжает работать и не удосужился прочитать статус завершения дочернего. В твоем случае незавершенные дочерние процессы передаются корневому. Были бы завершенными - исчезли бы вместе с родительским.

Зомби - это состояние, когда процесс завершен, память освобождена, а система хранит статус завершения до его востребования родительским процессом.


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.10.2020 7:17
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name