다음과 같은 셸 스크립트를 갖고 싶습니다.
my-app & echo $my-app-pid
하지만 저는 방금 실행 한 명령의 pid를 얻는 방법을 모릅니다.
jobs -p my-app
명령을 사용하여 pid를 grep 할 수 있다는 것을 알고 있습니다. 그러나 쉘을 여러 번 실행하려면이 방법이 작동하지 않습니다. jobspec 이 모호하기 때문입니다.
Answer
답변
PID
받기 :
#!/bin/bash my-app & echo $!
변수에 PID
저장 :
#!/bin/bash my-app & export APP_PID=$!
모든 인스턴스 저장 PID
텍스트 파일 :
#!/bin/bash my-app & echo $! >>/tmp/my-app.pid
분리 된 파일에 출력, 오류 및 PID
저장 :
#!/bin/bash my-app >/tmp/my-app.log 2>/tmp/my-app.error.log & echo $! >>/tmp/my-app.pid echo "my-app PID"s: $(cat /tmp/my-app.pid)"
댓글
- 질문이 ' 리디렉션에 대해 묻지 않으면
my-app
의 인스턴스가 완료되고 나중에 PID가 재사용되는 경우를 제외하고는 수락 된 답변과 거의 동일합니다. ' 파일에 잘못된 정보가 있습니다. 저는 '이 답변이 기존의 허용 된 답변에 많은 가치를 추가한다고 생각하지 않습니다. - @EricRenouf 게시물이 업데이트되었습니다!
- 다른 파생물 유용 할 수 있습니다. 이것은 PID를 가져와 동시에 (대부분) 포 그라운드 프로세스로 취급합니다.
sleep 4 | grep INVALID & export MY_PID=$!; fg; echo $MY_PID returned with $?
` - isnt APP =
main &
PID를 파악하는 방법이 있습니까?
답변
다음과 같은 것을 시도해보십시오
pidof my_app >> /tmp/my_app.pid
주석
- 외부 명령, 시스템이 PID를 직접 제공 할 수있는 경우 모든 프로세스를 검색하여 해당 정보를 찾는 이유 ? 또한 ' ' 올바른 값을 얻을 수 있는지 확신 할 수 없습니다
답변
다음과 같이 시도해보세요.
ps ef | grep "[m]y-app" | awk "{print $2}"
프로세스의 첫 글자를 [
]
는 목록에 grep
프로세스가 없는지 확인합니다. 필요한 경우 사용자 이름에 grep을 추가 할 수도 있습니다.
댓글
- 그 '는 매우 기껏해야 깨지기 쉽고 '
my-app
가 두 번 이상 실행되면 작동하지 않습니다. davidshen84 는 특히 이에 대해 걱정합니다. cas. - 이 길을가더라도 대신
pgrep
를 사용해야합니다.
/bin/sh -c 'echo $$>/tmp/my.pid && exec program args' &
– sysfault 11 월 24 일 ' 10 일 14:28echo $!
의 출력과 관련이 없습니다.
my-app & myVar=$! ; fg
.fg
는 프로세스를 다시 포 그라운드로 가져옵니다. 그런 다음 나중에echo $myVar
를 인쇄 할 수 있으며 ' 내 앱이 이미 완료되었음을 확신합니다.