Від питання тут , ОП хоче повторно опитувати ідентифікатор процесу з використанням 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.