|
Re: lug-bg: ps ax|grep sth
- Subject: Re: lug-bg: ps ax|grep sth
- From: Skeleta <g_georgiev.sz@xxxxxx>
- Date: Mon, 13 Jun 2005 14:04:38 +0300
- Delivered-to: lug-bg-list@xxxxxxxxxxxxxxxxxx
- Delivered-to: lug-bg@xxxxxxxxxxxxxxxxxx
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, което пък да си филтрира получения текст
и също да приключи работа.
Скелета
|
|
|
|