FreeBSD/TrueOS 및 OpenBSD

FreeBSD/TrueOS 및 OpenBSD

디렉토리에서 실행 중인 모든 프로세스를 나열하고 싶습니다.

예를 들어, 3개의 프로세스가 실행되고 있다고 가정합니다.

  • /home/myname/myapp/process1
  • /home/myname/myapp/process2
  • /home/myname/myapp/anotherprocess

시스템에 "실행 중인 모든 프로세스의 PID를 알려주세요 /home/myname/myapp"라고 요청하려면 어떻게 해야 하나요?

내가 생각할 수 있는 유일한 방법은

ps -eo pid,args | grep -i /home/myname/myapp | awk '{print $1}' | tr '\n' ' '

답변1

명령에 주의하세요.확실히디렉터리에서 실행 중인 프로세스를 나열합니다. 프로그램 이미지 파일이 있는 프로세스를 나열합니다.발견되다(셸을 통해) 해당 디렉토리에 있으므로 0번째 명령 인수에 나열됩니다(또는 다른 명령 인수에서 언급됩니다). 물론 이러한 프로세스가 반드시 해당 디렉터리에서 실행되는 것은 아닙니다. 나는 당신이 요구하는 것을 원한다고 가정합니다 (당신이 말한 것을 고려하면디렉토리에서 실행세 번) 명령이 실제로 수행하는 작업 대신.

운영 체제를 지정하지 않았기 때문에:

FreeBSD/TrueOS 및 OpenBSD

-f옵션을 사용하여 fstat파일 시스템별로 필터링하고, 이 stat명령을 사용하여 원하는 디렉터리의 inode 번호( ${directory}셸 변수에 적절하게 이름이 미리 지정됨)를 가져온 다음, 후자를 awk다음 항목의 출력에 대한 wd필터 로 사용합니다 fstat.

fstat -f "${디렉토리}" |
앗 '{
    if ($4 == "wd" && $6 == '"`stat -f %i \"${directory}\"`"' && !x[$3]++)
        $3를 인쇄하세요.
}'
다른 사용자의 프로세스를 포함하려면 슈퍼유저 (전용) fstat로 실행하세요 .

리눅스

두 가지 방법:

  • 해당 -d옵션을 사용하여 항목 lsof만 선택하고 cwd, 해당 stat명령과 일부 dc후처리를 사용하여 원하는 디렉토리의 inode 번호와 마운트된 장치의 주/부 번호(셸 변수에 적절하게 미리 이름이 지정됨)를 얻은 ${directory}다음 awk후자의 두 개를 출력 필터로 사용하십시오 lsof.
    lsof -d cwd |
    앗 '{
        if ($8 == '"`stat --format %i \"${디렉터리}\"`"' \
        && $6 == "'"`dc -e \"16doi \`stat --format %D \"${디렉터리}\"\` 100~ rn[,]Pn\"`"'" \
        && !x[$2]++)
            $2를 인쇄하세요.
    }'
    다른 사용자의 프로세스를 포함하려면 슈퍼유저 (전용) lsof로 실행하세요 .
  • fuser다른 답변에서와 같이 사용됩니다.

답변2

사용 fuser -m /path/to/folder 2>/dev/null( stderr출력에서 삭제) 또는 사용 가능한 사용 사례 확인man fuser

관련 정보