디렉토리에서 실행 중인 모든 프로세스를 나열하고 싶습니다.
예를 들어, 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