몇 가지 다른 방법으로 프로세스의 작업 디렉토리를 찾을 수 있다는 것을 알고 있지만 그 반대를 수행할 수 있는 방법이 있습니까? 노드에 작성된 일부 서버 애플리케이션이 있는데 불행하게도 이를 프로세스로 구별하기가 어렵고(모두 출력 node server.js
에 표시됨 ps
) 특정 서버가 실행 중인지 쉽게 확인할 수 있는 방법이 있기를 바랐습니다.
즉, 내가 대답해야 할 질문은 다음과 같습니다. 디렉토리가 주어지면 작업 디렉토리에서 프로세스가 실행되고 /x/y/z
있습니까 ?node server.js
/x/y/z
지금까지 최선의 시도는 ps -ef | grep "[n]ode server.js"
PID를 잘라서 루프를 통해 pwdx
각 PID를 확인하는 것입니다. 작동하지만 번거롭고 더 좋은 방법이 있는지 알고 싶습니다.
답변1
pwdx는 PIDS를 허용하므로 다음을 사용할 수 있습니다.
$ pwdx $(ps -C "node server.js" --format pid --no-headers)
2781: /home/user
4405: /home/user/src.git/
그리고 .zshrc 또는 .bashrc에 함수를 정의할 수도 있습니다.
function select_by_dir()
{
if (( $# == 0))l then
pwdx $(ps -C "node server.js" --format pid --no-headers)
else
pwdx $(ps -C "node server.js" --format pid --no-headers) | grep $1
fi
}
}
답변2
어때요?
pwdx `pgrep "server.js"`
답변3
방금 검색을 했어요 /proc
.
그러면 cwd를 알고 있는 모든 pid가 옆에 cwd와 함께 나열됩니다.
(cd /proc/; for p in [0-9]*; do
cwd="$(readlink "$p/cwd")" || continue; echo "$p $cwd";
done)
grep
이렇게 하거나 루프에 매처를 직접 삽입할 수 있습니다.
(cd /proc/; for p in [0-9]*; do
cwd="$(readlink "$p/cwd")" || continue;
[ "$cwd" != "$THE_CWD_IM_LOOKING_FOR" ] || { echo "$p"; break; }
done)
답변4
@skwllsp의 답변을 바탕으로 문제를 해결하기 위해 다음 bash 기능을 생각해 냈습니다.
function is-server-running {
local path=$(realpath "${1-.}")
pwdx $(ps -C "node server.js" --format pid --no-headers) | grep --silent "$path"
}
모두의 도움에 감사드립니다!