Từ câu hỏi ở đây , OP muốn liên tục thăm dò ý kiến của một quá trình sử dụng pidof
trong tập lệnh shell. Tất nhiên điều này không hiệu quả vì một quy trình mới phải được bắt đầu cho pidof
chương trình nhiều lần trong một giây (tôi không biết rằng đây là nguyên nhân khiến CPU tăng đột biến trong câu hỏi, nhưng có vẻ như vậy).
Thông thường cách xoay quanh loại điều này trong tập lệnh shell là làm việc với một chương trình duy nhất xuất dữ liệu bạn cần stdout
và sau đó thực hiện một số xử lý văn bản nếu cần. Mặc dù điều này liên quan đến nhiều chương trình được chạy đồng thời, nhưng nó có thể sẽ ít tốn CPU hơn vì các quy trình mới không được tạo ra liên tục cho mục đích bỏ phiếu.
Vì vậy, đối với câu hỏi trên, một giải pháp có thể là có một số chương trình đưa ra tên và giá trị của các quy trình khi chúng được tạo. Sau đó, bạn có thể làm một cái gì đó như:
pids-names |
grep some_program |
cut -f 2 |
while read pid; do
process-pid "$pid"
done
Vấn đề với điều này là nó đặt ra một câu hỏi cơ bản hơn, làm thế nào các pids và tên quy trình có thể được in khi chúng được tạo ra?
Tôi đã tìm thấy một chương trình được gọi ps-watcher
, mặc dù vấn đề với nó là nó chỉ là một đoạn perl
script chạy liên tục ps
nên nó không thực sự giải quyết được vấn đề. Một tùy chọn khác là sử dụng auditd
có thể hoạt động nếu nhật ký được xử lý trực tiếp qua tail -f
. Một giải pháp lý tưởng sẽ đơn giản và dễ mang theo hơn giải pháp này, mặc dù tôi sẽ chấp nhận một auditd
giải pháp nếu đó là lựa chọn tốt nhất.
dbus
).
fork
hoặc biến thể), sau đó chương trình mới được bắt đầu sử dụng một thành viên trongexec
gia đình. Vì vậy, bạn có thể muốn đăng nhậpexec*
, không phảifork
.