Nếu tôi chạy một kịch bản mà bắt đầu một số quy trình với &
nhưCó một câu lệnh shell rằng sẽ giết chết tất cả các đuôi nền xử lý
tail -f log file1 &
tail -f log file2 &
Làm thế nào tôi có thể đóng cửa tất cả chúng xuống cùng một lúc?
Nếu tôi chạy một kịch bản mà bắt đầu một số quy trình với &
nhưCó một câu lệnh shell rằng sẽ giết chết tất cả các đuôi nền xử lý
tail -f log file1 &
tail -f log file2 &
Làm thế nào tôi có thể đóng cửa tất cả chúng xuống cùng một lúc?
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.
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.
"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
cảm ơn tuyệt vời :) – doapydave
đâ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