PPID - Информационна бележка

Архив на тагове: PPID

Лекция No14 - Процеси, задачи. Команди fg, bg, jobs, top, nohup

В тази лекция ще завършим темата за процесите и сигналите вLinux и ще преминем към темата за монтиране на файлови системи. В последния урок многократно използвахме знака& (амперсанд) в края на командата (sleep 100 & ). Знакът амперсанд в края на командата означава, че стартираният процес ще трябва да бъде поставен на заден план.Ако изпълним командатаsleep 100 без знака&, тогава няма да получим подкана на командния ред, докато процесътsleep не приключи.

Командите, стартирани от конзолата с амперсанд, се изпълняват във фонов режим и се наричат ​​задачи (работи ). Можем да кажем, чезадачите са процеси, свързани с обвивката. Такива задачи, в допълнение към традиционнияPID, също имат собствена номерация, започваща от единица. Можете да видите изпълняванитезадачи на интерпретатора с командатаjobs. Примерът по-долу показва ситуацията, когато има двезадачи и изпълнението на една от тях е спряно.

Въведетеtop в конзолата. Тази команда показва в реално време съществуващи процеси, но не всички, а само частта, която се побира на екрана. Ще се върнем към тази команда малко по-късно. Засега може да забележите, чеtop не връща контрола на обвивката. Можете или да излезете от програмата (като натиснете q), или да спрете процеса с клавишната комбинацияctrl+z (не бъркайте комбинациитеctrl+c -end процес иctrl+z -stop процес). Видяхме спрения процесtop в горния пример. За да възобновите работата на този процес (задача), има две команди:fg иbg, съкращения от англ.думи foreground (преден план) и background (фон). Синтаксисът е прост:fg номер на задачата. Командатаfg работи не само със спрени задачи, но и със задачи като цяло. В нашия пример командатаfg 2 ще изведе процесаsleep на преден план и подканата на обвивката ще стане недостъпна (сякаш ако изпълним командатаsleep без символа& ). Командатаfg 2 ще възобнови процесаtop и ще го изведе на преден план. Командатаfg без параметър ще възобнови последния процес, спрян от комбинациятаctrl+z, и ако няма такива, ще изведе на преден план последната задача (задача с по-висок пореден номер).Задачата, която ще бъде възстановена (показана) от командатаfg без параметър, е маркирана със знака+ в изхода на командатаjobs. Командатаbg е предназначена да възстанови работата наспрени процеси (задачи) във фонов режим.

Имайте предвид също, чезадачите имат собствено номериране за всеки терминал (конзола). Ако влезете в друга конзола и стартирате процес във фонов режим, номерът назадачата ще започне от едно. Също така няма да намерите помощ за командитеfg иbg (man fg, man bg ). Тъй като тези команди са част отbash. И ще намерите споменаване за тях вman bash.

Всички процеси, стартирани от обвивката, са деца на обвивката. ИPPID на такива процеси ще бъде равен наPID на съответния шел. Ако излезете от командния интерпретатор, тогава всички процеси, стартирани от него (включително тези във фонов режим), ще бъдат прекратени. Влезте в две конзоли и стартирайте няколко процеса във втората,отидете на първия и изпълнете командатаps al :

В примера имаме две обвивки, изпълняващиbash сPID равно на 13180 и 16442. Следват 4 процеса, които бяха стартирани от втората обвивка - те могат да бъдат идентифицирани чрезPPID равно на 16442. Сега излезте (командаexit ) от втората обвивка и изпълнете командатаps al отново в първия интерпретатор:

Както можете да видите, не само процесът сPID 16442 приключи, но и всички процеси-потомци (PPID 16442). Още едно доказателство, че дъщерен процес не може да съществува без родителски процес.

Но какво ще стане, ако трябва да стартирате процеса и да излезете от конзолата, така че процесът да продължи да работи в системата? Има само един изход - да прехвърлите дъщерния процес на друг процес, който ще бъде негов родител. Тази функция е реализирана в командатаnohup. Тази команда ви позволява да изпълнявате процеси, които ще бъдат отделени от терминала, ако терминалът е затворен. Правим експеримент. Изпълняваме всяка команда (напримерping ) презnohup в една конзола и разглеждаме процесите, без да я напускаме:

1 2 3 4 5 6 7 8 9

Виждаме, че сегаping процесът имаPPID равен на 17427 (тоест, той е наследник наbash shell) иPID 17450. Сега нека излезем отbash shell сPID 17427 и отново да погледнем процесите:

Както можете да видите, въпреки факта, че напуснахме обвивката, процесът сPID 17450 остана в системата и взе за свой родител процеса сPID равно на 1, тоест процесътinit. Процес 17450 ще съществува дотогавадокато съществува процесътinit или докато не го убием сами с командатаkill.

По подразбиране процесите са сортирани по използване на процесора. Ако трябва да промените реда на сортиране, трябва да натиснете клавишната комбинацияShift+o илиShift+f. След натискане на тази клавишна комбинация ще се покаже прозорец, в който можете да изберете колоната, по която искате да сортирате таблицата. Например, за да сортирате таблица по обема на заетата памет, трябва да натиснете комбинациятаShift+o, след това клавишаn и да натиснетеEnter. За да промените реда на сортиране (възходящ/низходящ), натиснетеShift+r.

За да получите кратка помощ относно програматаtop, натиснете клавишаh.

За да покажете процесите на конкретен потребител, в работещата програмаtop натиснете клавишаu и след това въведете името на акаунта и натиснетеEnter. За да покажете отново всички процеси, натиснетеu и без да въвеждате нищо, натиснетеEnter.

Много е удобно да използвате програматаtop за премахване на процеси, които натоварват системата. Такива процеси (зареждане на процесора на 100%) ще бъдат в горната част на таблицата по подразбиране. РазглеждамеPID на процеса, натискаме клавишаk, пишемPID и натискамеEnter. След това записваме сигнал номер 9 и отновоEnter.

Командатаtop има много повече възможности, вижте помощта за повече подробности. С това приключваме темата за процесите и сигналите. Следващата лекция ще се фокусира върху монтирането на файлови системи.

Взето от http://igorka.com.ua/2009-11-13/lekciya-14-processy-zadaniya-komandy-fg-bg-jobs-top-nohup/

Лекция № 12 - Linux процеси. хубав фактор. ps команда

Днес ще говорим за процесите вLinux и следващата лекция ще бъде за сигнали, които процесите могат да използват, за да комуникират помежду си. За управление на процесите има такава подсистема катомениджър на процеси. Както бе споменато по-рано,Linux прилага превантивна многозадачност и мениджърът на процеси напълно управлява процесите. Всеки процес има свой собствен контекст. Контекстът на процеса е таблицата за разпределение на паметта, текущото състояние на процеса, приоритет на процеса, данни за използване на ресурсите, маска на сигнала, идентификатори на процеси и други свойства. ИД на процеса се състои от ИД наPID и ИД на родителския процесPPID.

Както вече знаете, първият потребителски процес се наричаinit. НеговиятPID винаги е 1, а неговиятPPID е 0, тъй като няма родителски процес, а е създаден от ядрото в даден момент по време на зареждане на системата. Всички други процеси са дъщерни процеси и имат ненулевPPID. За да създаде нов процес, родителят извиква функцията на ядротоfork(), в резултат на което родителският процес се клонира и се получава абсолютно идентичен процес в началния етап. Единствената разлика е, чеPID на дъщерния процес се увеличава.PID на дъщерния процес винаги ще бъде по-голям от този на родителския. В противен случай контекстът ще съответства напълно на родителя. След това се стартира функциятаexec() за дъщерния процес, който започва да променя контекста към желания, зарежда програмния код в паметта и т.н.

Операционната системаLinux също е многопотребителска. Всеки процес има такъв параметър като „собственик“ - от чието име се изпълнява процесът. Това еUID на процеса. Процесът също имапараметър катоGID (подобно на потребителGID ). Освен това има параметри катоEUID (ефективенUID ) иEGID (ефективенGID ). Възможностите на процеса в системата се определят от тези параметри:EUID иEGID.

ЕС >ЕС >

Само един процес може да се изпълнява в даден момент. Но тъй като превключването между процесите е много бързо (хиляди превключвания в секунда), изглежда, че всички те работят едновременно. Колко процесорно време и други ресурси да бъдат разпределени за всеки процес се решава от мениджъра на процеса. Параметър на процеса катоnice (илиnice-factor ) играе роля при вземането на това решение.nice-factor е числова стойност. Колкото по-голям е той, толкова по-малко ресурси (процесорно време и т.н.) ще бъдат заделени за процеса по време на неговата работа.

Много процеси извършват входно/изходни операции към/от терминала. Следователно има такъв параметър като терминала. И има процеси, които работят във фонов режим. Такива процеси не са обвързани с терминала. Например процесcron.

Един процес може да бъде в няколко състояния:

1. Изпълнение - мениджърът на процеса е разпределил всички необходими ресурси и процесът просто чака своя ред, за да получи следващата част от процесорното време. 2. Изчакване - процесът е получил всички ресурси, но за да продължи да работи, чака някаква информация, например от друг процес. 3. Спрян - процесът не прави нищо, не получава процесорно време. Процесът е прехвърлен в това състояние с помощта на специални сигнали и може да излезе от това състояние само с помощта на съответния сигнал. 4. "Зомбиране" е процес, който трябваше да приключиосвобождаване на всички ресурси, но по някаква причина завършването не се случи правилно. Трябва да внимавате със зомби процесите. Ако има много такива процеси, значи нещо не е наред в системата.

Командатаps aux се използва за изброяване на всички съществуващи процеси. Резултатът по-долу е съкратен (има много повече процеси):

/linux$ ps aux ПОТРЕБИТЕЛСКИ PID %CPU %MEM VSZ RSS TTY STAT КОМАНДА НАЧАЛНО ВРЕМЕ root 11740 0.0 0.0 3124 448 ? S Автор: aleccksin Публикувано в Уроци за Linux Също така маркирани Централен процесор, Дистрибуции, Групов идентификатор, IMac, Linux, Операционна система, Ubuntu Няма коментари

1 2 3 4 5 6