Від питання тут , ОП хоче повторно опитувати ідентифікатор процесу з використанням pidof
в сценарії оболонки. Звичайно, це неефективно, оскільки новий процес потрібно починати для pidof
програми кілька разів на секунду (я не знаю, що це причина сплеску процесора у питанні, але це здається вірогідним).
Зазвичай шлях подібного до сценарію оболонки - це робота з єдиною програмою, яка виводить потрібні вам дані, stdout
а потім виконує деяку обробку тексту, якщо це необхідно. Хоча це передбачає, що більше програм одночасно запускається, це, ймовірно, буде менш інтенсивним процесором, оскільки нові процеси не створюються постійно для цілей опитування.
Отже, для вищезазначеного питання, одним із варіантів рішення може бути наявність якоїсь програми, яка виводить імена та підручники процесів під час їх створення. Тоді ви можете зробити щось на кшталт:
pids-names |
grep some_program |
cut -f 2 |
while read pid; do
process-pid "$pid"
done
Проблема в цьому полягає в тому, що вона ставить більш фундаментальне питання, як можна друкувати ідентифікатори підрозділів та імена процесів під час їх створення?
Я знайшов програму під назвою ps-watcher
, хоча проблема з цим полягає в тому, що це просто perl
сценарій, який багато разів запускається, ps
тому він насправді не вирішує проблему. Інший варіант - використання, auditd
яке, ймовірно, може спрацювати, якщо журнал оброблявся безпосередньо через tail -f
. Ідеальне рішення було б простішим і портативнішим, ніж це, хоча я прийму auditd
рішення, якщо це найкращий варіант.
dbus
).
fork
або варіанту), потім нова програма запускається з використанням членаexec
сім’ї. Отже, ви, мабуть, хочете ввійти в протоколexec*
, а неfork
.