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 13:05:39 +0300
- Delivered-to: lug-bg-list@xxxxxxxxxxxxxxxxxx
- Delivered-to: lug-bg@xxxxxxxxxxxxxxxxxx
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].
[1] когато процес се опита да чете или пише в тръбата без да има някой на
другия край.
[2] strace ls $HOME | echo
write(1, "18464-coffeeparty.jpg\nAdobeFnt.l"..., 1021) = -1 EPIPE (Broken
pipe)
--- SIGPIPE (Broken pipe) @ 0 (0) ---
+++ killed by SIGPIPE +++
[3] http://www.tldp.org/LDP/lpg/node10.html
--
pub 4096R/0E4BD0AB 2003-03-18 <danchev.fccf.net/key pgp.mit.edu>
fingerprint 1AE7 7C66 0A26 5BFF DF22 5D55 1C57 0C89 0E4B D0AB
|