C'è qualche differenza fondamentale tra piping in mac e linux?


1
ps -e | grep bash

esempio di output da una macchina Linux:

1128 pts/14   00:00:00 bash
7491 pts/7    00:00:00 bash
12651 pts/14   00:00:00 bash
16145 pts/2    00:00:00 bash

esempio di output da una macchina mac:

58352 ttys000    0:00.09 login -pfl username /bin/bash -c exec -la bash /bin/bash
58353 ttys000    0:00.02 -bash
58390 ttys000    0:00.00 grep bash
20372 ttys005    0:00.06 login -pfl username /bin/bash -c exec -la bash /bin/bash
20373 ttys005    0:00.18 -bash

La mia domanda è questa: perché vediamo "grep bash" nel secondo caso, ma non nel primo caso.


1
come funziona il piping è collegato al programma bash, l'aspetto dell'output è correlato a ps. Forse MacOS ha una versione / variante diversa di ps installato. Avete notato differenze nell'output prima delle connessioni?
Baarn

Che tipo di linux? Ricordo vagamente di aver ottenuto il secondo comportamento in Ubuntu
Journeyman Geek

Su Linux ho visto questo lavoro un modo una volta e l'altro modo la volta successiva. Penso che abbia a che fare con gli ID compito assegnati più di ogni altra cosa, anche se non posso spiegare come.
Daniel R Hicks

O probabilmente è una funzione della dimensione del buffer pipe e dell'ordine delle sequenze di thread. Nel primo caso ps aveva oltrepassato dove avrebbe trovato grep nella lista filo prima che riempisse il primo buffer di tubi. Da quando è stato calciato per primo, lo ha fatto prima grep era iniziato. Nel secondo caso il buffer è stato riempito prima del luogo in cui grep sarebbe stato raggiunto nell'elenco delle attività.
Daniel R Hicks

Risposte:


1

Non riesco a riprodurre il comportamento di Mac OS X in questo momento: è probabilmente correlato ai dettagli della pianificazione del processo nel sistema operativo e potrebbe dipendere dal tempo e dal numero di processori.

$ ps -e | grep bash
86880 ttys000    0:00.18 -bash
87718 ttys000    0:00.00 (bash)

Generalmente, OS X fornisce principalmente programmi da riga di comando BSD e le distribuzioni Linux portano le varianti GNU. Sono implementazioni (per lo più) compatibili degli stessi strumenti di base, ma si comportano diversamente, con caratteristiche e argomenti spesso diversi.

Dato che i programmi utilizzati (o versioni nei casi in cui sono effettivamente gli stessi) sono così diversi, non penso sia possibile determinare quali sono le cause grep bash per apparire sul tuo sistema.


ottengo grep bash anche nell'output, come mi aspettavo, perché quando avido qualcosa, di solito lo farò grep -v grep dopo per sbarazzartene.
slhck

@ slhck Grazie, ha aggiunto il proprio adesso per chiarire. Sono abituato anche a questo, quindi la mia assunzione di tempistica / pianificazione dei processi è coinvolta.
Daniel Beck

E in realtà io di solito vedo il grep <string> quando io ps aux | grep <string> in linux.
m4573r

1

In ogni caso, la differenza osservata non ha nulla a che fare con la pipa e tutto ciò che riguarda ps. Prova a reindirizzare l'output di ps in un file e cercare la stringa lì.


Sospetto che abbia a che fare con la dimensione del buffer della pipa.
Daniel R Hicks

Ne dubito, forse questa particolare versione di osx ps filtra il grep stesso. Caratteristica utile davvero. Semplicemente non penso che sia il piping a fare la differenza.
terdon

Come / perché ps "filtrerà" grep, rispetto a qualsiasi altra attività? Come fa a sapere che non stai cercando un grep sospeso per ucciderlo?
Daniel R Hicks

Bene, tutti lo sanno ps sta per "software precognitivo" :). Non ho idea di cosa stavo pensando ...
terdon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.