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