Điểm:1

Tại sao `ps -x | grep foo` bao gồm lệnh grep?

lá cờ cn

tôi biết rằng nó làm (thường) bao gồm quy trình grep và tôi biết thêm | grep -v grep hoặc grepping trên [f]oo thay vào đó sẽ ngăn chặn nó, nhưng câu hỏi của tôi là nhiều hơn về thứ tự các hoạt động tôi đoán.

Ví dụ: trong ví dụ giả định này, tôi thấy một số quy trình grep:

% ps -x | đăng nhập grep | đăng nhập grep | đăng nhập grep | đăng nhập grep
 2475 ?? 0:00.03 /usr/libexec/loginitemregisterd
 2115 ttys004 0:00.04 đăng nhập -fp jasonerickson
29715 ttys004 0:00.00 grep đăng nhập
29716 ttys004 0:00.00 grep đăng nhập
29717 ttys004 0:00.00 grep đăng nhập
29718 ttys004 0:00.00 grep đăng nhập

Điều đó nói với tôi rằng ps -x phải được thực hiện Cuối cùng trong dòng đó, vì nó liệt kê tất cả các lệnh grep tiếp theo. Tuy nhiên, nó không nhất quán. Đôi khi, nó sẽ liệt kê 4 hoặc 3 hoặc 2 hoặc thậm chí không có quy trình grep nào. Điều đó có nghĩa với tôi rằng nó không phải là luôn Cuối cùng.

Chuyện gì đang xảy ra vậy?

Bravo avatar
lá cờ us
`|` thiết lập một đường dẫn từ `ps -x` stdout đến `grep login` stdin ... vì vậy, cả hai quy trình đều cần phải chạy để đường ống tồn tại
Điểm:3
lá cờ vn

Như Bravo đã chỉ ra, một đường dẫn trong Linux không phải là một tệp, nó là một tệp động. Cho nên ps -x | đăng nhập grep sẽ thực sự bắt đầu cả hai chương trình cùng một lúc, để một chương trình có thể hạ thấp đường ống và chương trình kia có thể bắt được. Lý do nó không mang tính quyết định, tại sao ví dụ giả tạo của bạn không phải lúc nào cũng hiển thị bốn tiếng kêu các phiên bản, có phải là một phiên bản có thể không được bắt đầu cho đến khi có thứ gì đó trong đường ống để nó thực hiện; hoặc trường hợp được đề cập có thể không được bắt đầu đầy đủ khi ps đọc danh sách quy trình.

Điểm:1
lá cờ nc

Unix là một hệ điều hành đa nhiệm. Nó không bắt đầu ps đầu tiên hoặc cuối cùng. Nó bắt đầu song song tất cả mọi thứ trong đường ống. Một số có thể về đích trước hoặc bắt đầu sau khi ps bắt đầu và đó là lý do cuộc đua của bạn bắt đầu khiến kết quả hơi không mang tính quyết định.

Về cơ bản, không có thứ tự hoạt động ở đây. Một đường ống là một luồng dữ liệu, không phải là một công thức toán học.

Cái hay của đường ống trong unix là chương trình thứ hai có thể bắt đầu xử lý đầu vào trước khi chương trình đầu tiên kết thúc, do đó không cần thiết phải thu thập và lưu trữ toàn bộ luồng dữ liệu trong bộ nhớ (hoặc đĩa) trước khi đưa nó vào chương trình tiếp theo. thứ trong đường ống.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.