내가 멍청 아를 가지고 있다고 해 mypid=$$
주어진 pid로 해당 프로세스의 종료를 청취하는 데 사용할 수있는 bash / system 명령이 있습니까?
mypid를 사용하는 프로세스가 없으면 명령이 단순히 실패해야한다고 생각합니다.
wait
wait()
내가 멍청 아를 가지고 있다고 해 mypid=$$
주어진 pid로 해당 프로세스의 종료를 청취하는 데 사용할 수있는 bash / system 명령이 있습니까?
mypid를 사용하는 프로세스가 없으면 명령이 단순히 실패해야한다고 생각합니다.
wait
wait()
답변:
이 답변에서 필요한 것을 얻었습니다 : https : //.com/a/41613532/1223975
.. wait <pid>
pid가 현재 프로세스의 하위 프로세스 인 경우에만 사용 합니다 .
그러나 다음은 모든 프로세스에서 작동합니다.
리눅스 :
tail --pid=$pid -f /dev/null
다윈 ( $pid
파일을 열어야 함) :
lsof -p $pid +r 1 &>/dev/null
리눅스 :
timeout $timeout tail --pid=$pid -f /dev/null
다윈 ( $pid
파일을 열어야 함) :
lsof -p $pid +r 1m%s -t | grep -qm1 $(date -v+${timeout}S +%s 2>/dev/null || echo INF)
bash 내장을 사용할 수 있습니다 wait
.
$ sleep 10 &
[2] 28751
$ wait 28751
[2]- Done sleep 10
$ help wait
wait: wait [-n] [id ...]
Wait for job completion and return exit status.
Waits for each process identified by an ID, which may be a process ID or a
job specification, and reports its termination status. If ID is not
given, waits for all currently active child processes, and the return
status is zero. If ID is a a job specification, waits for all processes
in that job's pipeline.
If the -n option is supplied, waits for the next job to terminate and
returns its exit status.
Exit Status:
Returns the status of the last ID; fails if ID is invalid or an invalid
option is given.
시스템 호출을 사용합니다 waitpid()
.
$ whatis waitpid
waitpid (2) - wait for process to change state
bash: wait: pid 47760 is not a child of this shell
... 롤 드로잉 보드에 다시
Alexander Mills가 다시 게시 한 https://stackoverflow.com/a/41613532/1223975 솔루션 과 관련하여 Timeout in Seconds
Darwin
GNU가없는 UNIX 유사 OS의 해결 방법은 다음과 같습니다 tail
. 이 명령은 특정 Darwin
적이 지 않지만 UNIX와 같은 운영 체제의 연령에 따라 제공되는 명령 줄이 필요 이상으로 복잡하여 실패 할 수 있습니다.
lsof -p $pid +r 1m%s -t | grep -qm1 $(date -v+${timeout}S +%s 2>/dev/null || echo INF)
하나 이상의 이전 UNIX에서 lsof
인수 +r 1m%s
가 실패합니다 (슈퍼 유저의 경우에도).
lsof: can't read kernel name list.
는 m%s
출력 포맷 규격이다. 더 간단한 포스트 프로세서는 필요하지 않습니다. 예를 들어 다음 명령은 PID 5959에서 최대 5 초 동안 대기합니다.
lsof -p 5959 +r 1 | awk '/^=/ { if (T++ >= 5) { exit 1 } }'
이 예에서 PID 5959가 5 초가 경과하기 전에 자체 협정을 종료하는 경우 ${?}
입니다 0
. 5 초 후에도 ${?}
반환 되지 않으면1
또한 명시한다는 점에서를 지적 가치가있을 수 있습니다 +r 1
의는 1
그 상황에 맞게 변경 될 수 있으므로, (초) 폴링 간격이다.