Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: lug-bg: ps ax|grep sth


  • Subject: Re: lug-bg: ps ax|grep sth
  • From: George Danchev <danchev@xxxxxxxxx>
  • Date: Mon, 13 Jun 2005 16:42:49 +0300
  • Delivered-to: lug-bg-list@xxxxxxxxxxxxxxxxxx
  • Delivered-to: lug-bg@xxxxxxxxxxxxxxxxxx

On Monday 13 June 2005 14:04, Skeleta wrote:
> George Danchev wrote:
> >On Monday 13 June 2005 11:31, Vesselin Markov wrote:
> >>Всъщност, май не зависи от времето за изпълнение нито на ps, нито на
> >> grep. Иначе, при всяко положение grep се изпълнява по-бъзо от ps, но за
> >> да тръгне той, ps трябва да е приключил вече.
> >
> >Това е не вярно. При process1 | process2 ядрото стартира двата процеса
> >едновременно (осигурявайки им file descriptors, etc). Проблема е, че не се
> >знае кой ще разруши тръбата първи, например process2 приключва преди
> > process1 (прекратявайки съществуването на тръбата) тогава ядрото праща
> > сигнал SIGPIPE ( EPIPE ) [1] на process1 който го хваща и ако не е лейм
> > exit()-ва подобаващо, ако . Пример [2]. Работите за доста сложни и
> > понякога зависи дали се пише атомично в тръбата или не, колко е атомично
> > за дадена ОС и т.н. повече на [3].
>
> В обсъждания случай "ps | grep" и двата процеса се стартират
> едновременно, а пръв ще приключи ps, понеже grep ще чака затваряне на
> входния си файл. На практика за друг наблюдаващ процес и двата ще
> завършат едновременно. Поне на мен така ми се струва - самото
> приключване на ps при добре направено ядро трябва да прехвърли
> управлението директно на grep, което пък да си филтрира получения текст
> и също да приключи работа.

Мда, май не сме точни в това какво значи едновременно защото ядрото отделя 
внимание на процесите в timeslices[0] нищо, че може да са и в pipe. Значи 
ядрото много бързо пуска (RN) и приспива процесите (S) (състоянията ги има 
описани в man ps) от двете страни на pipe-a с дискрет най-малко а може и 
няколко един timeslice защото не са само те. Какво ще стане ако ps приключи 
преди да е изтекъл неговия timeslice /много рядко може да стане, но има и 
такъв шанс както се вижда и тогава в неговия изход няма да има grep /. Дали 
ще бъде поставен в състояние RN - Running or runnable / low-priority , а 
после и приспан  S /за да чака другия край /, а grep може ли да е (а може и 
да не е [1] ) все още стартиран камо ли пък поставен в състояние S - 
Interruptible sleep. А дали кернела в зависимост от това с какъв scheduler 
работи няма да реши, че има по-високо приоритетна задача с която да се заеме 
преди това. Все въпроси с ескалираща сложност и на които се притеснявам да 
отговоря, просто ей така ;-)

[0] http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?query=Timeslice&action=Search
[1] ако е SMP система, grep може да бъде стартиран на друго CPU1 в timeslice 
преди да е изтекъл timeslice на ps на CPU0, но след като този ps instance е 
завършил.


-- 
pub 4096R/0E4BD0AB 2003-03-18 <danchev.fccf.net/key pgp.mit.edu>
fingerprint    1AE7 7C66 0A26 5BFF DF22 5D55 1C57 0C89 0E4B D0AB 



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.