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