Puncte:1

De ce `ps -x | grep foo` include comanda grep?

drapel cn

Știu că asta face (deseori) includ procesul grep și știu să adaug | grep -v grep sau grepping on [f]oo în schimb, îl va preveni, dar întrebarea mea este mai mult despre ordinea operațiunilor, cred.

De exemplu, în acest exemplu artificial, văd mai multe procese grep:

% ps -x | grep login | grep login | grep login | autentificare grep
 2475 ?? 0:00.03 /usr/libexec/loginitemregisterd
 2115 ttys004 0:00.04 autentificare -fp jasonerickson
29715 ttys004 0:00.00 grep login
29716 ttys004 0:00.00 grep login
29717 ttys004 0:00.00 grep login
29718 ttys004 0:00.00 grep login

Asta îmi spune că ps -x trebuie executat ultimul în acea linie, deoarece listează toate acele comenzi grep ulterioare. Cu toate acestea, nu este consecvent. Uneori va enumera 4 sau 3 sau 2 sau chiar niciunul dintre procesele grep. Asta ar însemna pentru mine că nu este mereu ultimul.

Ce se întâmplă?

Bravo avatar
drapel us
`|` stabilește o conductă de la `ps -x` stdout la `grep login` stdin ... deci, ambele procese ar trebui să ruleze pentru ca conducta să existe
Puncte:3
drapel vn

După cum subliniază Bravo, o conductă în Linux nu este un fișier, este dinamic. Asa de ps -x | autentificare grep va porni de fapt ambele programe simultan, astfel încât unul să poată arunca în jos conducta, iar celălalt să poată prinde. Motivul pentru care nu este determinist, de ce exemplul tău artificial nu arată întotdeauna patru grep cazuri, este că o instanță nu poate fi pornită până când nu există ceva în conductă de făcut; sau instanța în cauză poate să nu fie pornită complet când ps citește lista de procese.

Puncte:1
drapel nc

Unix este un sistem de operare multitasking. Nu pornește ps primul sau ultimul. Începe toate lucrurile în conductă în paralel. Unii s-ar putea să termine primii sau să înceapă după ce ps începe, și de aici provine cursa ta, ceea ce face ca rezultatele să fie ușor nedeterministe.

Practic, aici nu există o ordine a operațiunilor. O conductă este un flux de date, nu o formulă matematică.

Frumusețea conductei în Unix este că cel de-al doilea program poate începe procesarea intrării înainte ca primul program să se termine și, prin urmare, nu este necesar să colectați și să stocați întregul flux de date în memorie (sau disc) înainte de a-l da următorului. lucru în conductă.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.