bash 자식 프로세스의 PID (imapsync)-어떻게 얻습니까?


15

bash에서 실행되는 명령의 PID를 얻는 방법을 알려주십시오.

예를 들어 imapsync를 실행하는 bash 스크립트가 있습니다.

스크립트가 종료되면 imapsync 프로세스가 항상 종료되지는 않으므로 스크립트에서 imapsync의 PID를 프로그래밍 방식으로 식별하여 신호 처리기에서 imapsync 프로세스를 직접 종료 할 수 있기를 원합니다.

그렇다면 부모 bash 스크립트에서 자식 프로세스의 PID를 프로그래밍 방식으로 가져 오는 방법은 무엇입니까?


1
"pidof imapsync"는 어떻습니까? 무슨 일이야?
pitr

2
나는 pidof에 대해 몰랐다. 그러나 이제는 pidof가 시스템에서 주어진 명령의 모든 프로세스를 다른 스크립트 / 사용자가 소유 한 것까지 반환하는 것처럼 보이기 때문에이 시나리오에서는 유용하지 않습니다. 또한 imapsync는 실제로는 perl 스크립트이므로 pidof perl을 수행하고 있습니다. 이것은 pidof perl을 다시 수행하며 imapsync가 아니며 다른 사용자에게 속할 수있는 프로세스를 반환합니다.
Jason Tan

하비에르가 맞습니다. 이 페이지는 ProcessManagement 에 대한 자세한 정보를 제공합니다 .
sining jan

답변:


4

imapsync에는 pid가 작성되는 위치를 설정하는 옵션이 있습니다.

--pidfile : imapsync pid가 쓰여지는 파일입니다.


참고로 이것은 일반적인 의미로 내 질문에 실제로 답하지는 않지만 --pidfile 인수를 발견했으며 주변에서 약간의 괴로움이 충분히 생겼습니다.
Jason Tan

@JasonTan 왜 맛있는 미리 익힌 필렛을 줄 수있을 때 물고기에게 물고기를 가르치는가? 이전 게시물에 대해 죄송하지만 왜 Javiers 's를 통해이 답변을 수락 하시겠습니까?
동기화되지 않음

46
any_command args &
my_child_PID=$!

IOW $$는 PID를 $!보유하는 것처럼 가장 최근에 실행 된 백그라운드 명령 의 PID를가 집니다.


고맙지 만 imapsync는 배경이 아니며 $! imapsync 호출 후 다음 줄 또는 신호 처리기의 첫 번째 줄에서 에코하면 에코되지 않습니다. :-(
Jason Tan

6
아이를 포크하고 배경을 입히면 아이의 PID를 어딘가에 저장하는 것은 부모의 책임입니다. 일반적인 방법은 같은 곳에 저장하는 것 /var/run/whatever.pid입니다. 어딘가에 PID를 저장하도록 요청하는 명령 행 옵션이있을 수 있습니다. 그렇지 않은 경우 저자에게 요청하거나 직접 구현하는 기능처럼 들립니다.
Javier

1
배경에 중점을 둡니다 . 프로세스가 백그라운드에 배치되지 않은 경우 (즉, 추가됨 &) $!변수는 정의되지 않습니다.
Trevor

1
더 유사한 솔루션 (에 대한 답변)에 제안 막 시작 프로세스의 PID하는 방법을 ; 이 답변에 덧붙여서, 여기에 의견이 있습니다 : 아, 그리고 "oneliner": /bin/sh -c 'echo $$>/tmp/my.pid && exec program args' &– sysfault 11 월 24 일 10시 14:28
imz-Ivan Zakharyaschev

10

달리 pidof, pgrep이에 대한 PID를를 반환하는 프로세스를 제한하기 위해 다양한 옵션을 부여 할 수 있습니다. 특히 유용한 것은 현재 프로세스의 PID를 사용하여 PPID를 기반으로 선택하는 것입니다.

pgrep -P $$ imapsync

스크립트의 자식 인 경우에만 imapsync의 PID를 출력합니다.


0

imapsync를 일시적으로 백그라운드에 넣고 PID를 가져온 다음 포 그라운드하는 방법은 어떻습니까?

imapsync &
pid=$!
wait $pid
retVal=$?
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.