timed 함수를 구현하려고합니다. 타이머가 타임 아웃하면 기능/명령을 종료해야합니다. 함수/명령이 완료되면, 타이머는 bash가 타이머가 시간 종료 될 때까지 기다리지 않아야합니다.bash에서 timed 함수를 실행하십시오.
(cmdpid=$BASHPID; \
(sleep 60; kill $cmdpid 2>/dev/null) & \
child_pid=$!; \
ssh remote_host /users/jj/test.sh; \
kill -9 $child_pid)
test.sh는 60 초 이내에 완료 될 수도 있고 완료되지 않을 수도 있습니다. 이것은 잘 동작했다. 나는 "성공"또는 "실패"를 유저 네임 test.sh,의 결과를 얻을 때
는하지만, 나는 그것이 종료 타이머를 기다립니다 여기
result=$(cmdpid=$BASHPID; \
(sleep 60; kill $cmdpid 2>/dev/null) & \
child_pid=$!; \
ssh remote_host /users/jj/test.sh; \
kill -9 $child_pid)
로했습니다. 나는 "kill -9 $ child_pid"가 set -x 명령을 사용하여 실행되는 것을 볼 수 있지만 kill은 실제로 하위 쉘을 죽이지는 않습니다. 별도의 스크립트에 타이머를 실행하는 것이 문제를 해결하기
어떤 하위 셸에 대해 이야기하나요? 'sleep'이 끝나면,'kill $ cmdpid'는 첫 번째 서브 쉘을 죽일 것입니다 ... QUIT 신호 만 사용하면 가능합니다 (확실하지 않습니다). 내 의심 : 하위 프로세스 중 하나가 교수형에 처한 경우 QUIT 신호를 사용하여 하위 쉘을 죽일 수 있습니까? – Jdamian
문제는 당신이 서브 쉘을 죽이는 것이지, 그 안에'sleep'이 아니라는 것입니다.'ps'를 보면'sleep'의 부모 PID가 0임을 알 수 있습니다. – cdarke
'timeout' 명령을 알고 계십니까? 나는 휠체어를 다시 만들려고 노력하고있는 것 같다. – gilez