====== Základní info o procesu ====== * ''PID'' = process identification digit, identifikační číslo procesu. * Proces je abstraktní termín, který se používá pro prezentaci běžícího programu. Zjednodušeně je to běžící program, i když většina programů startuje více procesů současně. Procesy lze sledovat a řídit. * Uživatelské a systémové procesy používají stejná pravidla, lze tudíž využívat stejné nástroje. Hlavní myšlenkou je představa, že maximum práce by mělo být vykonáno procesy, nikoli jádrem. * Proces zahrnuje používaný adresní prostor (paměť využitou procesem - kód a knihovny, proměnné, zásobníky a další) a datové struktury jádra (mapa adresního prostoru, stav, priorita a zdroje procesu, signálová maska a vlastník procesu). Procesy mohou v linuxu sdílet adresní prostor, díky čemuž lze využívat multithreading - souběžné zpracování několika vláken. ===== Život procesu ===== Proces vzniká voláním jádra ''fork'', které vytvoří kopii původního procesu s novým ''PID'' a vrátí odlišné hodnoty pro potomka (''0'' - nulu) a rodiče (''PID'' potomka). Ty tuto hodnotu prozkoumají. Potomek který má spustit nový program obvykle volá ''exec'' a předá mu jako parametr volaný program, vynuluje zásobníky paměti. \\ Základním procesem je ''init'', který má ''PID 1'' a zajišťuje spouštění startovacích scriptů. Všechny procesy s výjimkou procesů vytvořených přímo jádrem jsou jeho potomky. \\ Pokud proces skončí činnost a je připraven k odstranění (má-li zemřít), volá ''_exit'' a dodá ukončovací kód (''0'' - nula při normálním ukončení). Jeho odstranění musí nejprve potvrdit rodič, což provede voláním ''wait''. Pokud rodič skončil dřív než potomek, stává se rodičem procesu ''init'' a provede ''wait'' sám. Proces tak může být ukončen (může zemřít). ===== PID ===== Jádro každému novému procesu přiřadí ''PID'', které identifikuje proces po celou dobu jeho života. Pokud chcete proces nějak spravovat, budete si muset jeho ''PID'' zjistit. \\ Proces také může spustit další proces. Děje se to klonováním stávajícího procesu, přičemž klon následně vymění provozovaný program za jiný. Mezi procesy tak vznikají vztahy rodiče a potomka. ''PID'' potomka je označováno jako ''PPID''. \\ Pokud spustíte program z [[:konzole|Konzole]] či [[:system:prikazovy_radek#terminal|terminálu]], zpravidla se stane řídícím terminálem procesu a poskytne procesu standardní vstup, standardní výstup a standardní chybový výstup. ===== Využití ===== ''PID'' konkrétního procesu můžeme zjistit například z výpisu [[.monitoring:ps|programu ps]]. Známe-li číslo procesu, pak s ním můžeme (máme-li k procesu vlastnická práva) udělat cokoli - změnit prioritu, přesunout na pozadí či na popředí, pozastavit či zrušit (zabít). Můžeme také zobrazit jeho rodiče i potomky, nároky na paměť i procesor a mnoho dalších informací. Znalost ''PID'' je nezbytná pro řízení procesů.\\ Pokud z terminálu spustíte program/příkaz, jehož práce trvá déle, zablokujete si okno až do skončení příkazu. Pokud je to vhodné, můžete běh programu přesunout [[.signaly|na pozadí]].