Score:1

ทำไม `ps -x | grep foo` รวมคำสั่ง grep หรือไม่

ธง cn

ฉันรู้ว่ามัน ทำ (บ่อยครั้ง) รวมกระบวนการ grep และฉันรู้ว่าเพิ่ม | grep -v grep หรือเกรปออน [f]อู แทนที่จะป้องกัน แต่คำถามของฉันเกี่ยวกับลำดับการดำเนินการที่ฉันเดา

ตัวอย่างเช่น ในตัวอย่างที่วางแผนไว้นี้ ฉันเห็นกระบวนการ grep หลายกระบวนการ:

% ps -x | grep เข้าสู่ระบบ | grep เข้าสู่ระบบ | grep เข้าสู่ระบบ | เข้าสู่ระบบ grep
 2475 ?? 0:00.03 /usr/libexec/loginitemregisterd
 2115 ttys004 0:00.04 เข้าสู่ระบบ -fp jasonerickson
29715 ttys004 0:00.00 grep เข้าสู่ระบบ
29716 ttys004 0:00.00 grep ล็อกอิน
29717 ttys004 0:00.00 grep เข้าสู่ระบบ
29718 ttys004 0:00.00 grep เข้าสู่ระบบ

นั่นบอกฉันว่า ps -x จะต้องดำเนินการ ล่าสุด ในบรรทัดนั้น เนื่องจากจะแสดงรายการคำสั่ง grep ที่ตามมาทั้งหมด อย่างไรก็ตามมันไม่สอดคล้องกัน บางครั้งจะแสดงรายการ 4 หรือ 3 หรือ 2 หรือแม้แต่ไม่มีกระบวนการ grep เลย นั่นก็ย่อมบอกเป็นนัยว่าไม่ใช่ เสมอ ล่าสุด.

เกิดอะไรขึ้น?

Bravo avatar
us flag
`|` สร้างไพพ์จาก `ps -x` stdout เป็น `grep login` stdin ... ดังนั้นทั้งสองกระบวนการจะต้องทำงานเพื่อให้ไพพ์มีอยู่
Score:3
ธง vn

ดังที่ Bravo ชี้ให้เห็น ไพพ์ใน Linux ไม่ใช่ไฟล์ แต่เป็นไดนามิก ดังนั้น ps -x | เข้าสู่ระบบ grep จะเริ่มทั้งสองโปรแกรมพร้อมกัน เพื่อให้โปรแกรมหนึ่งสามารถทอยท่อและอีกโปรแกรมหนึ่งสามารถจับได้ เหตุผลที่ไม่กำหนดได้คือเหตุใดตัวอย่างที่วางแผนไว้ของคุณจึงไม่แสดงสี่รายการเสมอไป เกรป อินสแตนซ์คืออินสแตนซ์อาจไม่เริ่มทำงานจนกว่าจะมีบางอย่างในไพพ์ให้ทำ หรืออินสแตนซ์ที่เป็นปัญหาอาจเริ่มต้นได้ไม่เต็มที่เมื่อใด ปล อ่านรายการกระบวนการ

Score:1
ธง nc

Unix เป็นระบบปฏิบัติการแบบมัลติทาสก์ มันไม่ได้เริ่ม ps ก่อนหรือหลัง มันเริ่มต้นทุกสิ่งในไปป์ไลน์พร้อมกัน บางคนอาจเข้าเส้นชัยก่อนหรือออกสตาร์ทหลังจากเริ่ม ps และนั่นคือที่มาของการแข่งขันของคุณ ซึ่งทำให้ผลลัพธ์ไม่ได้ถูกกำหนดขึ้นเล็กน้อย

โดยทั่วไปไม่มีลำดับการทำงานที่นี่ ไปป์ไลน์คือกระแสข้อมูล ไม่ใช่สูตรทางคณิตศาสตร์

ข้อดีของไพพ์ในยูนิกซ์คือโปรแกรมที่สองสามารถเริ่มประมวลผลอินพุตก่อนที่โปรแกรมแรกจะเสร็จสิ้น ดังนั้นจึงไม่จำเป็นต้องรวบรวมและจัดเก็บสตรีมข้อมูลทั้งหมดในหน่วยความจำ (หรือดิสก์) ก่อนที่จะส่งต่อไปยังโปรแกรมถัดไป สิ่งที่อยู่ในท่อ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา