2013-10-25 3 views
0

쉘 스크립트의 명령 시퀀스를 다른 프로세스가 중단하지 않고 어떻게 실행할 수 있습니까?중단없는 쉘 스크립트 실행

+0

중단하지 마십시오. –

+0

어떤 종류의 "중단"을 의미합니까? 예를 들어 줄 수 있습니까? –

답변

0

선매가 없다는 뜻인가요? 안돼. 커널 스케줄러는 언제든지 실행할 작업을 자유롭게 선택할 수 있습니다.

그러나 리눅스에서는 "실시간"우선 순위 (즉, SCHED_FIFO 또는 SCHED_RR)를 설정하여 우선 순위가 낮은 작업을 실행하기 위해 스크립트가 중단되지 않도록 할 수 있습니다.

0

셸 프로세스에서 인터럽트 또는 다른 신호를 무시하는 방법을 묻는 경우 trap 명령을 사용합니다.

trap "" 2 

나 :

trap "" INT 

는, 그 동작을 취소하려면 문자열에 아무것도 표시되지 않는 : 당신은 인터럽트 (및 관련 신호에 임시 파일을 제거해야하는 경우

trap 2 
trap INT 

) 다음과 같이 사용할 수 있습니다.

tmp=$(mktemp ${TMPDIR:-/tmp}/name.XXXXXX) 
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15 # EXIT HUP INT QUIT PIPE TERM 

...do operations using temporary files... 

rm -f $tmp 
trap 0  # Cancel the exit trap 

표시된 신호 세트는 대부분의 일반적인 이벤트를 포괄하는 꽤 포괄적 인 세트입니다. SIGKILL (kill -9)이 전송되면 임시 정보가 남게됩니다. 할 수있는 일은 없습니다. mktemp 명령은 파일을 안전하게 만듭니다 (Why do we need mktemp? 참조). 실제로 파일이 만들어지고 트랩이 중단되도록 임시 파일을 놓아 둘 사이에 작은 기회가 있습니다.