Stránka 1 z 1

Dědí procesy (explicitně nastavenou) prioritu?

Napsal: 22 dub 2013 21:12
od Myloš
Pomocí programů jako Process Explorer je možné nastavit procesům prioritu. Dědí ji? Jde mi o to, že procesy jsou v těchto programech uváděny hierarchicky, takže když třeba spustím z CMD souboru dávkovou konverzi do MP3 voláním programu lame.exe(*), „rodič“ (cmd.exe) je pořád tentýž, zatímco jednotlivé konverzní úlohy (provádí lame.exe) jsou jeho „potomky“. Dědí prioritu?
Podobně když spouštím některé procesy prostřednictvím asociované extenze z programu Total Commander (třeba Word nebo Gimp…) – pokud bych pro TCMD nastavil jinou prioritu, zdědí ji potomek?
Když se totiž podívám na prioritu procesu-potomka, má ji odlišnou (výchozí, tedy „normal), přestože subjektivně cítím (v případě lame.exe, u kterého to mám odzkoušené) nemá takové nároky, jako kdybych jeho rodiči prioritu nesnížil.
A konečně – pokud potomek zdědí nižší prioritu, co se stane, když ukončím nadřízený, rodičovský proces? (Například spustím renderování videa pomocí TCMD, kterému nastavím třeba idle, ale TCMD ukončím – potomek běží i po „smrti“ rodiče.)

Je o tom nějaké česky psané teoretické povídání? Víte o tom někdo něco bližšího?


(*) Jistě, Lame sám má přepínač commandu --priority, to vím a využívám toho, ale to není odpovědí na výše uvedenou otázku; nejde mi primárně o lame.

Re: Dědí procesy (explicitně nastavenou) prioritu?

Napsal: 22 dub 2013 21:21
od MiliNess
Až dorazím domů, tak ti něco napíšu.

Re: Dědí procesy (explicitně nastavenou) prioritu?

Napsal: 22 dub 2013 22:11
od Myloš
Díky. Už když jsem to psal, tušil jsem, že jestli o tom někdo bude něco vědět, budeš to ty. ;-)

Re: Dědí procesy (explicitně nastavenou) prioritu?

Napsal: 22 dub 2013 23:47
od MiliNess
Dědí prioritu?

Proces standardně dědí základní prioritu od mateřského procesu. Tedy rodič na syna, sys na svého syna, syn syna na svého syna atd.
Pokud je ale proces vytvořen pomocí API funkce CreateProcess s parametrem dwCreationFlags definujícím jinou úroveň priority nebo je spuštěn pomocí příkazu start s parametry low, normal, high, realtime, abovenormal nebo belownormal, bude mít prioritu takovou, jaká je požadována v parametru.
Pokud spustíš cmd.exe s below normal a v něm např. zmíněný lame.exe, poběží také s úrovní below normal. Jestliže lame.exe vytvoří další proces pomocí funkce CreateProcess
a v paramertu dwCreationFlags nebude specifikovat žádnou úroveň priority, bude mít vytvořený proces úroveň stejnou jako lame.exe. Pokud v paramertu dwCreationFlags předá hodnotu např. NORMAL_PRIORITY_CLASS, bude mít nový proces základní prioritu normal, bez ohledu na to, jakou úroveň má lame.exe.
Jinak synovský proces dědí od rodiče spoustu dalších věcí.

A konečně – pokud potomek zdědí nižší prioritu, co se stane, když ukončím nadřízený, rodičovský proces?

Potomek bude mít stále stejnou prioritu, kterou zdědil od rodiče, a to až do své smrti (pokud není priorita změněna některou API funkcí, interně volající systémovou službu NtSetInformationProcess).