
현재 실행중인 경로를 알고 싶습니다../a.out
여러 MPI 프로세스가 있지만 여러 ./a.out
. 그래서 먼저 아래 코드를 사용하여 grep합니다.
ps aux | grep -P "Rl.*a\.out" | grep -oP "\d+"|head -n 1
이는 하나의 PID(예: 12345)를 제공합니다.
이제 다음을 사용하고 싶습니다.
lsof -p12345
PID 12345의 파일 경로를 알고 싶습니다.
2단계를 하나의 명령줄로 결합하는 방법은 무엇입니까?
답변1
답변2
xargs
명령이 여러 줄(또는 레코드)을 반환할 때 사용하는 것이 좋습니다 . 이 경우 명령은 단일 PID와 다음과 같은 셸 기능을 반환합니다.명령 대체적절한 해결책이 될 것입니다.
이를 통해 한 명령의 출력을 다른 명령에서 사용할 수 있으며 입력을 제공하는 명령을 $(
및 에 래핑하여 수행됩니다 )
. 이전에는 백틱(`)을 사용했지만 더 이상 권장되지 않습니다.
lsof -p $(ps aux|grep -P "Rl.*a\.out"|grep -oP "\d+"|head -n 1)
답변3
이름을 기반으로 PID를 찾는 첫 번째 복잡한 명령은 pgrep
다음과 같이 대체될 수 있습니다.
$ pgrep -nf a.out
70512
그런 다음 에서 경로를 얻으려면 lsof
에서 조건부 인쇄를 사용할 수 있습니다 awk
.
따라서 명령은 다음과 같습니다.
$ lsof -p $(pgrep -nf a.out) | awk '$4 == "cwd" {print $9}'
위의 내용은 다음 lsof
출력을 기반으로 합니다.
$ lsof -p $(pgrep -nf a.out)
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gsleep 70513 kenorb cwd DIR 1,4 1938 121793972 /my/path