명령은 언제 중단됩니까? 네트워크 리소스를 활용할 때 종종 예를 들어 컬을 통해 Google에 쿼리를 전달하여 정의를 조회하는 스크립트가 있을 수 있습니다. 모든 것이 잘 실행되면, 그것은 두 번째 또는 두 에 완료됩니다, 당신은 당신의 방법에있어. 이것은 틀림없이 코너 케이스의 비트이지만, 그것을 해결하기 위해, 신호를 보내기 전에 부모의 존재에 대한 자식 프로세스 테스트를 갖는 것에 대한 결정을 취소하고 대신 부모 스크립트가 시간 의 완료시 모든 자식 하위 셸을 죽이게하자 부분. PS를 사용해야하고 하위 셸보다 더 많은 프로세스를 선택하기 때문에 빌드하기가 약간 까다롭기 때문에 자체 프로세스를 선별할 필요가있을뿐만 아니라 실제로 스크립트 자체가 아닌 하위 셸 프로세스를 제거하려고합니다. 첫 번째 타이머가 다 떨어지기 전에 두 번째 코드 블록이 시작되는 경우 상황이 발생합니다. 첫 번째 시간 미정 블록에 100초를 할당하고 90초 안에 완료한다고 가정해 보겠습니다. 일반 코드는 5초가 걸리고, 정확히 10초 동안 블록 2에 있습니다. 그런 다음 첫 번째 ALRM 타이머가 다른 100이 아닌 10초 후에 트리거됩니다. 좋지 않아요. 스크립트가 영원히 실행되지 않도록 함수를 만드는 것은 어렵지 않습니다.

그러나 다른 사람들이 필요한 만큼 오래 걸릴 수 있는 동안 일부를 시간 제고하기를 원한다면 어떨까요? 너무 빨리, 데이브는 그의 최신 작품 쉘에서 설명합니다. 그러나 네트워크의 오프라인 또는 Google에 문제가 있거나 네트워크 쿼리가 실패할 수 있는 백만 가지 다른 이유가 있는 경우 스크립트는 어떻게 됩니까? 그것은 단지 자신의 시간 시간 기능을 가지고 컬 프로그램에 의존, 영원히 걸려 있습니까? 좋지 않아요. 이번에는 쉘 스크립트에서 신호 관리의 다른 측면을 탐구하고 싶습니다 : 특정 함수 또는 명령이 중단되면 명시적 결과를 완료할 수있는 시간 퀀텀을 지정할 수있는 타이머가 내장되어 있습니다. 후자를 해 봅시다. 그것은 쉽게, 그리고 잠에서 몇 초 동안 주위에 부동 하위 쉘을 갖는 것은 확실히 컴퓨팅 자원의 낭비가 되지 않을 것입니다. 가장 일반적인 경보 타이머 접근 방법 중 하나는 전체 스크립트에 해당 퀀텀을 기다린 다음 부모를 죽이는 하위 셸을 생성하여 완료해야 하는 특정 시간을 제공하는 것입니다. 그래, 좀 Oedipal,하지만 적어도 우리는이 스크립트에서 어떤 눈을 찌르고 있지 않다! „함정”이 관련되어 있지 않습니다. 특히 닫는 괄호에는 하위 셸이 백그라운드로 푸시되고 부모 스크립트가 진행되지 않도록 실행되도록 하는 후행 앰퍼샌드가 있습니다. 그러나 이렇게 하면 SIGALRM을 캡처하려면 부모 스크립트에서 무엇이 필요합니까? 스크립트에 유용한 일반 추가의 주제를 계속 하기 위해 몇 가지 함수를 설정 해 보겠습니다. 해결책은? PID에서 생성 한 오류를 찾을 수 없습니다 무시 : 부모에서 신호를 촬영하기 위해 기다리는 일부 자식 프로세스를 떠나는 것을 신경 쓰지 않는다면 쉽습니다. 프로세스가 있는 경우 반환 코드는 0이 됩니다. 사라지면 반환 코드가 0이 아닙니다.

이것은 간단한 테스트를 제안합니다 : 더, 나는 이 문제를 해결할 수있는 다른 방법이 있다고 확신합니다.이 경우 코드의 여러 시간 시간 의 부분이 필요한 상황이 발생했는지 여부에 대해 독자의 의견을 듣는 데 가장 관심이 있을 것입니다. , 당신이 그것을 관리하는 방법! http://www.linuxjournal.com/contact 통해 전자 메일을 보냅니다.