Я хочу получить статус процесса для всех служб, работающих в данном каталоге. Прямо сейчас я могу проверить один за другим ps -ef | grep ServiceName
. Но есть ли способ, чтобы ls
каталог и ps
каждый сервис?
Что-то вроде ps -ef | grep < ls
?
Уже опубликовано в качестве комментария, это должно делать то, что вы хотите:
ps -ef | grep "$(ls)"
В Баш:
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
чтобы получить доступ ко всем процессам. Если это не нужно , и вы хотите , чтобы запустить его в качестве обычного пользователя, часть в '
достаточно.
Может быть, что-то вроде этого:
processes="$(ps -ef)"
for file in *;do
grep "$file" <<<"$processes"
done