2013-03-06 27 views

Trả lời

2

Bạn có thể tham khảo các tác vụ nền trong trình bao hiện tại của mình với các thành ngữ %1, %2, ....

Theo hiểu biết của tôi, không có thứ gì như là bắt tất cả; không có %* hoặc tương đương.

Nhưng bạn có thể tắt với

kill %1 %2 %3 %4 %5 %6 %7 %8 

nào sẽ giết tám quá trình nền đầu tiên vẫn đang chạy trong vỏ hiện tại của bạn. Đó có thể hoặc không phải là tail.

Hãy cẩn thận với người mà bạn giết ;-)

Nếu bạn có toàn quyền kiểm soát quy trình nền, đây có thể là đặt cược an toàn cho bạn. Vì bạn đề cập rằng bạn muốn làm điều này từ một kịch bản shell, và nếu các tail s là các quá trình nền duy nhất, thì điều này là đơn giản. Chỉ cần chắc chắn rằng kịch bản shell của bạn bắt đầu một subshell, để nó không bao giờ ảnh hưởng đến các tiến trình nền của một shell tương tác. Ví dụ: bạn có thể bắt đầu tập lệnh của mình với

#!/usr/bin/bash 

và đặt các bit quyền thực thi trên tập lệnh và luôn gọi tập lệnh theo tên. Nói cách khác, bạn không nên source script_file tập lệnh đó.

Mặt khác, jim's answer để lưu các pids (quá trình id) của bất kỳ quá trình bạn đang bắt đầu là một cách an toàn hơn nhiều để giết chết các quy trình khác.

+0

đây có lẽ là lựa chọn an toàn dễ dàng hơn .. cảm ơn một lần nữa – doapydave

5

killall tail nên thực hiện thủ thuật nhưng nó cũng sẽ đóng mọi quy trình đuôi khác mà bạn đang chạy.

7

Bạn có thể giết chết tất cả các lệnh đuôi bởi killall tail

+1

thats the answer i was hopin for! – doapydave

+0

Vậy đó. Đơn giản và dễ dàng. – Guus

1

"nhớ" các PID đứa trẻ.

tail -f logfile1 & 
pid1=$! 

tail -f logfile2 & 
pid2=$! 

kill $pid1 $pid2 

Rõ ràng, bạn sẽ không đưa ra lệnh giết ngay lập tức như vậy trong tập lệnh thực của bạn. Bạn có thể thực sự muốn chờ cho các tiến trình con thay thế. Nhưng điều này làm những gì bạn đã yêu cầu

+0

cảm ơn tuyệt vời :) – doapydave

Các vấn đề liên quan