Bạn có nhận thấy rằng bạn có hai PID khác nhau trong hai lần thử không?
Xem xét điều này: nếu bạn gõ một lệnh như thế vi raven.txt, thì ps axsẽ hiển thị một dòng hiển thị lệnh vi raven.txt. Tương tự, nếu bạn gõ một lệnh như thế grep snappr, thì nó ps axsẽ hiển thị một dòng hiển thị lệnh grep snappr. Và, nếu bạn dẫn đầu ra của psthông qua đó grep snappr, grepsẽ tìm thấy dòng mô tả chính nó . Vì vậy, nếu bạn gõ
$ ps ax | grep snappr | awk '{print $1}'
lặp đi lặp lại, nó sẽ in một số khác nhau mỗi lần (vì nó in ra PID grepvà bạn sẽ có một grepquy trình mới, duy nhất mỗi khi bạn chạy lệnh).
Cuối cùng, hãy xem xét: killlệnh không thể được thực thi cho đến khi (các) đối số của nó được biết. Để biết được đối số của nó, $(ps ax | grep snappr | awk '{print $1}')đường ống phải được hoàn thành. Điều này ngụ ý rằng grepphải chấm dứt 1 . Do đó, việc killđược đưa ra quy trình PID của grepquy trình, nhưng chỉ sau khi grepquy trình kết thúc - do đó, một cách tự nhiên, nó báo cáo "Không có quy trình như vậy".
Có lẽ tôi nên đề cập rằng không có snapprquá trình chạy. Nếu có, lệnh đầu tiên của bạn sẽ xuất ra hai số: PID của snapprvà PID của grep snappr. Bây giờ, nếu snapprđang chạy, lệnh của bạn có thể bắt đầu chạy bán chính xác, ý tôi là nó làm những gì bạn muốn nhưng cũng đưa ra một thông báo lỗi. Nếu snapprnó đang chạy với PID 42097 và grep snapprchạy với PID 70848, thì killlệnh sẽ là kill 42097 70858, nó sẽ giết snappr
và nhận thông báo lỗi từ việc cố gắng giết grepquá trình không còn tồn tại.
Có lẽ bạn sẽ muốn cải thiện điều này. Cách yêu thích của tôi, mà tôi đã phát minh ra cách đây 20 năm, nó là để thay đổi grepthành grep "[s]nappr", sẽ phù hợp snapprnhưng sẽ không khớp với chính nó. Một cách tiếp cận khác là sử dụng pgrepchứ không phải ps | grep.
1 Ngoài ra, awkcó thể kết thúc nếu grepchỉ đóng thiết bị xuất chuẩn của nó. Đây sẽ là hành vi rất bất thường đối với chương trình * nix.
snapprđang chạy, lệnh đầu tiên sẽ liệt kê hai PID: đó làsnapprvà củagrep- như đã giải thích trong câu trả lời của tôi, mà tôi đã đăng nửa giờ trước khi bạn đăng bình luận này. ... ... ... ... ... PS Bạn có thể muốn đọc lại các đóng góp của mình tốt hơn một chút ("Tôi là các trạng thái lỗi", "quảng cáo", "mit").