Tôi có thể xâu chuỗi pgrep với kill không?


31

Tôi đã nhận thấy rằng |được sử dụng để gửi kết quả của lệnh đầu tiên cho người khác. Tôi muốn giết tất cả các quy trình khớp với một tên.
Đây là những gì pgrep thường làm:

$ pgrep name
5089
5105

Và nhiều đối số dường như hoạt động với kill:

sudo kill 5089 5105

Nhưng điều này là sai:

pgrep name | kill

Vậy làm thế nào để làm điều đó đúng?


3
pkill. Và nếu điều đó không tồn tại , kill $(pgrep ...).
Mikel

Tôi không chỉ hỏi về những lệnh cụ thể đó mà còn để hiểu rõ hơn về chuỗi lệnh. Nhưng như tôi có thể thấy từ điểm số câu hỏi, những câu hỏi có nghĩa là không được chào đón ...
Tomáš Zato - Tái lập Monica

Nếu bạn muốn làm cho câu hỏi chung chung hơn và đảm bảo nó không phải là một bản sao, tôi có thể bỏ phiếu.
Mikel

Xin lỗi, vô tình xóa bình luận trước đây của tôi. Tôi đang ở trên một máy tính bảng và trang web này có các nút thực sự nhỏ cạnh nhau.
Mikel

Tôi chỉ nói rằng tôi bị từ chối vì câu hỏi của bạn dường như không hỏi bất cứ điều gì bạn không thể học được man pgrep. Nút downvote cho biết khi một câu hỏi cho thấy không có nỗ lực nghiên cứu và tôi không thể thấy bất kỳ câu hỏi nào trong câu hỏi của bạn. Xin lỗi nếu điều đó có vẻ khắc nghiệt.
Mikel

Câu trả lời:


42

Thử đi:

pgrep name | xargs kill

Nếu bạn sử dụng pgrep name | kill, thông số của pgrep namenguồn cấp dữ liệu là stdin của kill. Bởi vì killkhông đọc các đối số từ stdin, vì vậy điều này sẽ không hoạt động.

Sử dụng xargs, nó sẽ xây dựng các đối số cho killtừ stdin. Thí dụ:

$ pgrep bash | xargs echo
5514 22298 23079

5
Không có gì để làm với không gian so với dòng mới. Đơn giản là vì kill không đọc các đối số trên stdin.
Mikel

@Mikel: Lỗi của tôi, đã sửa.
cuonglm


5

Để trả lời chung chung chứ không phải cụ thể ...

Ống là để chuyển đầu ra từ một chương trình như đầu vào cho một chương trình khác.

Có vẻ như bạn đang cố gắng sử dụng đầu ra của một chương trình làm đối số dòng lệnh cho chương trình khác, điều này khác.

Để làm điều đó, sử dụng thay thế lệnh .

Ví dụ nếu bạn muốn chạy

sudo kill 5089 5105

Và bạn có một lệnh pgrep namexuất ra5089 5105

Bạn đặt chúng lại với nhau như

sudo kill $(pgrep name)

Cảm ơn rất nhiều. Tôi hy vọng điều này sẽ giúp những người mới bắt đầu quá.
Tomáš Zato - Phục hồi Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.