Эффективный способ отслеживания или просмотра ps -ef для неизвестного процесса с известной строкой - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь определить, какие приложения работают с известной строкой, которая может существовать для неизвестного имени процесса, как часть аргументов выполняемых команд.

Например: странный процесс. sh XXX YYY ZZZ

Где я знаю, что такое ZZZ, и ничего больше. Простой оператор if сбрасывает строку в текстовый файл для проверки.

Сценарий, называемый process-check. sh работает

#!/bin/bash
while true
do
CMD=$(ps -efwww | grep "$1" |grep -v "grep\|process-check.sh")
if [[ ! -z $CMD ]];
then
    echo $CMD >> process-check.txt
else
    continue
fi
done

Существуют ли linux встроенные или существующие команды, которые могли бы лучше отслеживать, наблюдать или, возможно, записывать выполнение процесса, если не знать какое ограничение процесса?

1 Ответ

0 голосов
/ 05 апреля 2020

Нет встроенной команды linux для наблюдения за процессом с определенными аргументами, и ваш скрипт довольно хорош!

Чтобы более полно реализовать цель иметь скрипт, который может «определить, какие приложения работают, содержащие известную строку, которая может существовать для неизвестного имени процесса как часть аргументов выполняемых команд», вот несколько сценарии, которые вы можете найти полезными.

Используемые приемы

  • Список всех системных процессов ps -efwww
  • Удаление первых 8 несущественных полей : ps -efwww | tr -s ' ' | cut -d' ' -f8-
  • Печатать только строки, содержащие не менее 4 слов (команда + 3 аргумента) awk 'NF>=1+3'
  • Печатать только строки, содержащие указанное ключевое слово grep "${1}"

Варианты сценариев

Имя программы или любой аргумент должны соответствовать строке запроса

ps -efwww | tr -s ' ' | cut -d' ' -f8- | awk 'NF>=1+3' | grep "${1}"

Любой аргумент должен соответствовать строке запроса

ps -efwww | tr -s ' ' | cut -d' ' -f9- | awk 'NF>=3' | grep "${1}"

Третий аргумент должен соответствовать строке запроса

ps -efwww | tr -s ' ' | cut -d' ' -f11- | awk 'NF>=1' | cut -d' ' -f1 | grep "${1}"

Просто сохраните один из этих однострочников в своем скрипте process-check.sh и выполните watch process-check.sh Бросок в tee -a logfile.log или >>, чтобы создать запись.

...