1

Я хочу получить статус процесса для всех служб, работающих в данном каталоге. Прямо сейчас я могу проверить один за другим ps -ef | grep ServiceName . Но есть ли способ, чтобы ls каталог и ps каждый сервис?

Что-то вроде ps -ef | grep < ls?

3 ответа3

2

Уже опубликовано в качестве комментария, это должно делать то, что вы хотите:

ps -ef | grep "$(ls)"
2

В Баш:

ps -ef | grep "$(ls)"

(Та же самая строка появилась в комментарии incBrain, когда я составлял и тестировал оставшуюся часть моего ответа в Debian/Bash.)

Он будет генерировать мусор, если шаблон выводится в выводе ps в качестве аргумента командной строки (не команды) или как часть команды. Чтобы уменьшить это, я бы использовал find вместо ls для получения полного пути:

ps -ef | grep -f <(find -L "$(pwd)" -maxdepth 1 -type f)

Тем не менее могут быть некоторые нежелательные дополнительные выходные данные.

Обратите внимание, что это не

сервисы, работающие в данном каталоге

скорее процессы с исполняемыми файлами в данном каталоге.

Чтобы сообщить текущему рабочему каталогу процесса, вы можете прочитать /proc/<PID>/cwd . Следующий пример (быстрый и грязный) альтернатива ps и он показывает, что вы можете извлечь информацию из /proc в нужной форме:

sudo bash -c 'for i in /proc/[1-9]* ; do PID=$(basename "$i"); E=$(readlink "${i}/exe"); D=$(readlink "${i}/cwd"); echo -e "PID=${PID}\tEXE=${E}\tCWD=${D}" ; done | grep "CWD=$(pwd)$"'

Вам нужен sudo чтобы получить доступ ко всем процессам. Если это не нужно , и вы хотите , чтобы запустить его в качестве обычного пользователя, часть в ' достаточно.

0

Может быть, что-то вроде этого:

processes="$(ps -ef)"
for file in *;do
  grep "$file" <<<"$processes"
done

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