Титла: Как се определят PID-тата на процесите Публикувано от: programings в Apr 06, 2013, 16:19 Здравейте!
Интересно ми е Линукс как определя PID-тата на процесите? На база на какви фактори? Дали Windows го прави по същият начин? Титла: Re: Как се определят PID-тата на процесите Публикувано от: n00b в Apr 06, 2013, 19:19 Общо взето се бройкат нагоре.
На Виндовс обаче се бройкат през 4 (0-4-8-12-16) докато на Linux/OSX се бройкат през 1. Когато се зацикли (т.е. мине 2^16 или unsigned int 32) почва наново, стига да не се стигне до колизия (не може да имаш 2 еднакви pid-a). При колизия се взема следващия свободен pid. Титла: Re: Как се определят PID-тата на процесите Публикувано от: programings в Apr 06, 2013, 19:40 Ясно.
Значи все пак не е толкова трудно да се предвиждат какви ще бъдат PID-тата на процесите, и при Linux, и при Windows. Повдигнах темата, защото се занимавам с един алгоритъм за генериране на псевдо-произволни числа - Mersenne Twister. Та сийда на този алгоритъм се генерира като се включва като фактор и PID-то на процеса на PHP да кажем, ако се използва в PHP (функцията mt_rand). Ако се успее да се предвиди какво ще бъде PID-то, то ще бъде по-лесно да се разбере какво ще генерира приблизително и функцията. Е, след като сме предвидили и другите фактори де. Благодаря, много ми помогна. Титла: Re: Как се определят PID-тата на процесите Публикувано от: go_fire в Apr 06, 2013, 20:35 Струва ми се почти невъзможно да предвидиш индефикационният номер на процес на отдалечен сървър, различен от init ;)
Титла: Re: Как се определят PID-тата на процесите Публикувано от: gat3way в Apr 06, 2013, 22:46 Цитат Повдигнах темата, защото се занимавам с един алгоритъм за генериране на псевдо-произволни числа - Mersenne Twister. Та сийда на този алгоритъм се генерира като се включва като фактор и PID-то на процеса на PHP да кажем, ако се използва в PHP (функцията mt_rand). Каква е целта на занятието? PID-а на текущият процес има ужасно ниска ентропия, на повечето линукс дистрибуции, въпреки че pid_t е typedef-нат като long, реално новия pid се AND-ва с една маска, която на практика те ограничава до 2^15 или 32 хиляди възможни PID-а. В PHP, seed-а на mt_rand() е 32-битов или 4 милиарда стойности. С други думи използваш мнооооого малка част от възможните стойности с които да seed-неш алгоритъма. На практика, PHP също проявава престъпна простотия в името на лесното ползване - никой не е казал, че Mersenne Twister-а трябва да се seed-ва с една 32-битова стойност, seed-а на алгоритъма са първите няколко шестстотиникусур числа от една редица. В PHP за да не си измисляш толкова на брой стойности, хващат един скапан PRNG, LCG-базиран както rand(), seed-ват го с твоята стойност, генерират въпросните шестстотин и нещо стойности и с тях seed-ват mersenne twister-а. Ако мислиш да ползваш mt_rand() за някакви security неща, примерно генериране на session cookie-та, линкове за ресетване на пароли или нещо подобно, МНОГО внимавай в картинката :) Ако разчиташ само на PID-а на процеса за seed-ване примерно, със сигурност ще имаш проблеми. Титла: Re: Как се определят PID-тата на процесите Публикувано от: bop_bop_mara в Apr 08, 2013, 16:23 Значи все пак не е толкова трудно да се предвиждат какви ще бъдат PID-тата на процесите, и при Linux, и при Windows.Поне под Линукс (за Уин нищо не знам) нямаш никакъв шанс да предвидиш ядрото как ще насрочи исканията за fork или за което и да е системно прекъсване. Гейт ще каже, но аз се съмнявам дали и самите разработчици на тази част от ядрото биха могли да направят такова нещо. Титла: Re: Как се определят PID-тата на процесите Публикувано от: shoshon в Apr 08, 2013, 17:29 ... ако за 1 мин имаш 1000 форка, всеки с време за изпълнение 1 секунда, ще имаш не повече от 15/20 различни PID-а.
Виж в AIX ще върват нагоре :) |