Автор Тема: Как се определят PID-тата на процесите  (Прочетена 1438 пъти)

programings

  • Напреднали
  • *****
  • Публикации: 221
  • Distribution: Arch Linux, BunsenLabs Linux, FreeBSD
  • Window Manager: XFCE, MATE, Openbox
    • Профил
Здравейте!

Интересно ми е Линукс как определя PID-тата на процесите?
На база на какви фактори?

Дали Windows го прави по същият начин?
Активен

n00b

  • Напреднали
  • *****
  • Публикации: 1248
  • Distribution: OSX
  • Window Manager: 10.6, 10.8, 10.9
  • Live to hack, hack to live.
    • Профил
Re: Как се определят PID-тата на процесите
« Отговор #1 -: Apr 06, 2013, 19:19 »
Общо взето се бройкат нагоре.

На Виндовс обаче се бройкат през 4 (0-4-8-12-16) докато на Linux/OSX се бройкат през 1.
Когато се зацикли (т.е. мине 2^16 или unsigned int 32) почва наново, стига да не се стигне до колизия (не може да имаш 2 еднакви pid-a). При колизия се взема следващия свободен pid.
Активен

mobilio - професионални мобилни приложения

programings

  • Напреднали
  • *****
  • Публикации: 221
  • Distribution: Arch Linux, BunsenLabs Linux, FreeBSD
  • Window Manager: XFCE, MATE, Openbox
    • Профил
Re: Как се определят PID-тата на процесите
« Отговор #2 -: Apr 06, 2013, 19:40 »
Ясно.

Значи все пак не е толкова трудно да се предвиждат какви ще бъдат PID-тата на процесите, и при Linux, и при Windows.

Повдигнах темата, защото се занимавам с един алгоритъм за генериране на псевдо-произволни числа - Mersenne Twister. Та сийда на този алгоритъм се генерира като се включва като фактор и PID-то на процеса на PHP да кажем, ако се използва в PHP (функцията mt_rand).

Ако се успее да се предвиди какво ще бъде PID-то, то ще бъде по-лесно да се разбере какво ще генерира приблизително и функцията. Е, след като сме предвидили и другите фактори де.

Благодаря, много ми помогна.
Активен

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8798
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Как се определят PID-тата на процесите
« Отговор #3 -: Apr 06, 2013, 20:35 »
Струва ми се почти невъзможно да предвидиш индефикационният номер на процес на отдалечен сървър, различен от init ;)
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Как се определят PID-тата на процесите
« Отговор #4 -: Apr 06, 2013, 22:46 »
Цитат
Повдигнах темата, защото се занимавам с един алгоритъм за генериране на псевдо-произволни числа - Mersenne Twister. Та сийда на този алгоритъм се генерира като се включва като фактор и PID-то на процеса на PHP да кажем, ако се използва в PHP (функцията mt_rand).

Ако се успее да се предвиди какво ще бъде PID-то, то ще бъде по-лесно да се разбере какво ще генерира приблизително и функцията. Е, след като сме предвидили и другите фактори де.

Каква е целта на занятието? 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-ване примерно, със сигурност ще имаш проблеми.
Активен

"Knowledge is power" - France is Bacon

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: Как се определят PID-тата на процесите
« Отговор #5 -: Apr 08, 2013, 16:23 »
Значи все пак не е толкова трудно да се предвиждат какви ще бъдат PID-тата на процесите, и при Linux, и при Windows.
Поне под Линукс (за Уин нищо не знам) нямаш никакъв шанс да предвидиш ядрото как ще насрочи исканията за fork или за което и да е системно прекъсване. Гейт ще каже, но аз се съмнявам дали и самите разработчици на тази част от ядрото биха могли да направят такова нещо.
Активен

shoshon

  • Напреднали
  • *****
  • Публикации: 497
    • Профил
Re: Как се определят PID-тата на процесите
« Отговор #6 -: Apr 08, 2013, 17:29 »
... ако за 1 мин имаш 1000 форка, всеки с време за изпълнение 1 секунда, ще имаш не повече от 15/20 различни PID-а.

Виж в AIX ще върват нагоре :)
Активен