응용 프로그램 작성기는 동일한 프로세스가 alarm() 및 sleep() 함수를 모두 사용할 때 가능한 상호 작용을 알고 있어야 합니다. alarm() 및 setitimer(), ualarm() 또는 usleep() 간의 상호 작용은 지정되지 않습니다. alarm() 및 setitimer()는 동일한 타이머를 공유합니다. 한 사람에게 호출하면 다른 호출의 사용을 방해할 수 있습니다. 가장 일반적인 경보 타이머 접근 방법 중 하나는 전체 스크립트에 해당 퀀텀을 기다린 다음 부모를 죽이는 하위 셸을 생성하여 완료해야 하는 특정 시간을 제공하는 것입니다. 그래, 좀 Oedipal,하지만 적어도 우리는이 스크립트에서 어떤 눈을 찌르고 있지 않다! 다중 스레드 응용 프로그램에서 경보 생성을 위한 두 가지 선택 사항, 즉 호출 스레드에 대한 생성 또는 프로세스의 생성이 있었습니다. 첫 번째 옵션은 경보 상태가 프로세스별로 유지되고 alarm()의 마지막 호출에 의해 설정된 경보가 활성화될 유일한 옵션이기 때문에 특히 유용하지 않았을 것입니다. 수면()은 SIGALRM을 사용하여 구현될 수 있다; 알람() 및 sleep()에 대한 호출을 혼합하는 것은 나쁜 생각입니다. alarm() 이전에 예약된 경보가 배달될 때까지 남은 시간(초) 또는 이전에 예약된 경보가 없는 경우 0을 반환합니다. alarm()은 SIGALRM 신호가 몇 초 만에 프로세스에 전달될 수 있도록 정렬합니다. 남은 시간이 있는 이전 alarm() 요청이 있는 경우 alarm()은 이전 요청이 SIGALRM 신호를 생성할 때까지 의 시간 수인 0이 아닌 값을 반환합니다. 그렇지 않으면 alarm()이 0을 반환합니다. 어떤 경우에도 이전에 설정한 알람()은 취소됩니다.
데이브 테일러는 정말 오랜 시간 동안 UNIX와 리눅스 시스템에 쉘 스크립트를 해킹하고있다. 그는 맥 OS X와 사악한 멋진 쉘 스크립트에 대한 유닉스를 학습의 저자입니다. 당신은 @DaveTaylor 트위터에서 그를 찾을 수 있습니다, 당신은 그의 기술 Q&A 사이트를 통해 그에게 도달 할 수 있습니다 : 데이브 테일러에게 문의. 나는 프로그램이 2 초 후에 „hello“를 인쇄 할 것으로 예상하지만 대신 출력은 „zsh : alarm ./a.out“응용 프로그램 작성기는 인수 초의 유형과 alarm()의 반환 값이 서명되지 않았다는 점에 유의해야합니다. 즉, 엄격하게 준수하는 POSIX 시스템 인터페이스 응용 프로그램은 ISO C 표준이 65535로 설정하는 {UINT_MAX}의 최소 보장 값보다 큰 값을 전달할 수 없으며 더 큰 값을 전달하는 응용 프로그램은 이식성을 제한합니다. . 다른 형식을 고려했지만 16비트 int 형식을 포함한 기록 구현은 서명되지 않은 형식이나 int를 일관되게 사용합니다. 초가 0이면 보류 중인 경보 요청(있는 경우)이 취소됩니다.
경보, exec(), 포크(), getitimer(), 일시 정지(), 시그액션(), 수면(), ualarm(), usleep(), IEEE Std 1003.1-2001의 기본 정의 볼륨,