백그라운드 프로세스에 연결된 스크립트가 있습니다. 이제 두 번째 스크립트를 함께 실행한 다음 첫 번째 스크립트(백그라운드 프로세스 시작)를 실행하고 싶습니다.
두 번째 프로세스가 완료되면 백그라운드 프로세스가 자동으로 종료되도록 끝에 종료 명령을 추가할 수도 있습니다.
예: 스크립트 1
#!/bin/tcsh
#
background process &
#
일단 실행되면
스크립트 2:
#!/bin/tcsh
#
matlab <program.m>
#
스크립트 2가 완료되면 두 프로세스를 모두 종료합니다. 어떻게? ?
미리 감사드립니다
답변1
나는 당신이 그들이 "함께" 시작하기를 원한다고 말할 때 당신이 상대적으로 서로 가깝다는 것을 의미한다고 가정합니다. 이렇게 하려면 원하는 순서대로 스크립트를 한 줄씩 실행하면 됩니다.
#!/bin/bash
./script2.sh &
.script1.sh
백그라운드 프로세스의 끝을 캡처하려면 첫 번째 프로세스의 PID를 저장해야 합니다. 이렇게 하려면 스크립트 프로세스를 백그라운드에 두고 $!
로컬 변수에 저장하세요.
포그라운드 스크립트 종료 시 백그라운드 프로세스도 종료하고 싶다면 Bash의 trap
기능을 이용하면 된다. 실행하려는 함수 또는 코드 블록과 포착하려는 신호를 전달합니다.
#!/bin/bash
./script2.sh &
SCRIPT_2_PID=$!
trap "kill $SCRIPT_2_PID; exit" SIGHUP SIGINT SIGTERM
./script1.sh
이 trap
함수는 제공된 신호에 대한 일반적인 응답을 대체하므로 스크립트를 종료하려면 CTRL+C이 함수를 포함해야 합니다 exit
.