1

Мне нужно разобрать

0 R username+ 13790 13743  0  80   0 - 28162 -      19:07 pts/0    00:00:00 grep --color=auto pm2
4 S root     25197     1  0  80   0 - 237119 ep_pol Apr05 ?       00:00:32 node /usr/local/lib/node_modules/pm2/bin/pm2

введите выходные данные и найдите PID для процесса /usr/local/lib/node_modules/pm2/bin/pm2 .

пока у меня есть

PROCESS_ID=$(ps -elf | grep pm2 | grep -v grep | awk 'FNR<2{print $4}')

но это только PID для первой строки. Нет гарантии, какой будет правильный PID, так как программа upstart иногда показывает 2-3 результата для этого grep. Мне нужен способ отфильтровать, какую строку читать в awk, я думаю, так как нужная строка будет там только по одной за раз. Любая помощь приветствуется

2 ответа2

1

Посмотрите на pgrep:

pgrep -f /usr/local/lib/node_modules/pm2/bin/pm2
0

awk можно отфильтровать, начав выражение с /regex /

Я изменился

ps -elf | grep pm2 | grep -v grep | awk 'FNR<2{print $4}'

в

ps -elf | grep pm2 | grep -v grep | awk '/node_modules/FNR<2{print $4}'

и это сработало. Вы также можете искать более длинный путь, избегая слешей:

ps -elf | grep pm2 | grep -v grep | awk '/\/lib\/node_modules/FNR<2{print $4}'

также работает

Как ужасно, так и awk, эта статья была очень простой http://www.tecmint.com/use-linux-awk-command-to-filter-text-string-in-files/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .