작업 디렉토리를 통해 프로세스(또는 최소한 그 존재)를 찾는 방법이 있습니까?

작업 디렉토리를 통해 프로세스(또는 최소한 그 존재)를 찾는 방법이 있습니까?

몇 가지 다른 방법으로 프로세스의 작업 디렉토리를 찾을 수 있다는 것을 알고 있지만 그 반대를 수행할 수 있는 방법이 있습니까? 노드에 작성된 일부 서버 애플리케이션이 있는데 불행하게도 이를 프로세스로 구별하기가 어렵고(모두 출력 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"
}

모두의 도움에 감사드립니다!

관련 정보