alarm()은 SIGALRM 신호가 몇 초 만에 프로세스에 전달될 수 있도록 정렬합니다. 다중 스레드 응용 프로그램에서 경보 생성을 위한 두 가지 선택 사항, 즉 호출 스레드에 대한 생성 또는 프로세스의 생성이 있었습니다. 첫 번째 옵션은 경보 상태가 프로세스별로 유지되고 alarm()의 마지막 호출에 의해 설정된 경보가 활성화될 유일한 옵션이기 때문에 특히 유용하지 않았을 것입니다. 나는 2 초 후 “안녕하세요”를 인쇄 할 프로그램을 기대하지만, 대신 출력은 “zsh : 알람 ./a.out”때 명령이 중단합니까? 네트워크 리소스를 활용할 때 종종 예를 들어 컬을 통해 Google에 쿼리를 전달하여 정의를 조회하는 스크립트가 있을 수 있습니다. 모든 것이 잘 실행되면, 그것은 두 번째 또는 두 에 완료됩니다, 당신은 당신의 방법에있어. alarm() 및 setitimer(), ualarm() 또는 usleep() 간의 상호 작용은 지정되지 않습니다. 초가 0이면 보류 중인 경보 요청(있는 경우)이 취소됩니다. fork() 함수는 자식 프로세스에서 보류 중인 경보를 지웁니다. exec 함수 중 하나에 의해 생성된 새 프로세스 이미지는 이전 프로세스의 이미지에서 경보 신호에 남은 시간을 상속합니다. 수면()은 SIGALRM을 사용하여 구현될 수 있다; 알람() 및 sleep()에 대한 호출을 혼합하는 것은 나쁜 생각입니다. 남은 시간이 있는 이전 alarm() 요청이 있는 경우 alarm()은 이전 요청이 SIGALRM 신호를 생성할 때까지 의 시간 수인 0이 아닌 값을 반환합니다. 그렇지 않으면 alarm()이 0을 반환합니다. 버전 7 및 시스템 V를 포함한 많은 기록 구현을 통해 경보를 최대 2초 일찍 발생시수 있습니다.

다른 구현에서는 경보를 최대 1초 또는 1클럭까지 일찍 진드기하거나 조기에 발생시키지 않습니다. 후자는 가장 예측 가능한 동작을 제공하기 때문에 가장 적합한 것으로 간주됩니다. 따라서 응용 프로그램은 초 인수를 신호 전에 경과하고자 하는 최소 시간으로 선택할 수 있습니다. 응용 프로그램 작성기는 인수 초의 형식과 alarm()의 반환 값이 서명되지 않았다는 점에 유의해야 합니다. 즉, 엄격하게 준수하는 POSIX 시스템 인터페이스 응용 프로그램은 ISO C 표준이 65535로 설정하는 {UINT_MAX}의 최소 보장 값보다 큰 값을 전달할 수 없으며 더 큰 값을 전달하는 응용 프로그램은 이식성을 제한합니다. . 다른 형식을 고려했지만 16비트 int 형식을 포함한 기록 구현은 서명되지 않은 형식이나 int를 일관되게 사용합니다. 어떤 경우에도 이전에 설정한 알람()은 취소됩니다. 가장 일반적인 경보 타이머 접근 방법 중 하나는 전체 스크립트에 해당 퀀텀을 기다린 다음 부모를 죽이는 하위 셸을 생성하여 완료해야 하는 특정 시간을 제공하는 것입니다. 그래, 좀 Oedipal,하지만 적어도 우리는이 스크립트에서 어떤 눈을 찌르고 있지 않다! alarm() 함수는 초 단위로 지정된 실시간 초 수가 경과한 후 프로세스에 대한 SIGALRM 신호를 생성하도록 시스템을 발생시게 됩니다.

프로세서 스케줄링 지연으로 인해 프로세스가 생성되는 즉시 신호를 처리하지 못할 수 있습니다. alarm() 함수는 항상 성공하며 오류를 나타내기 위해 반환 값이 예약되지 않습니다. alarm() 및 setitimer()는 동일한 타이머를 공유합니다. 한 사람에게 호출하면 다른 호출의 사용을 방해할 수 있습니다. 경보, exec(), 포크(), getitimer(), 일시 정지(), 시그액션(), 수면(), ualarm(), usleep(), IEEE Std 1003.1-2001의 기본 정의 볼륨, , 알람()이 이전에 예약된 알람으로 인해 남은 시간(초)을 반환합니다. 이전에 예약된 경보가 없는 경우 0이 됩니다.