Restaurante La Strada

linux alarm 예제

Posted on

alarm()은 SIGALRM 신호가 몇 초 만에 프로세스에 전달될 수 있도록 정렬합니다. 나는 프로그램이 2 초 후에 “안녕하세요”를 인쇄 할 것으로 예상하지만, 대신 출력은 “zsh : 알람 ./a.out”알람() 이전에 예약 된 알람이 전달 될 예정때까지 남은 초 의 수를 반환, 또는 이전에 예약 된 알람이없는 경우 0. 응용 프로그램 작성기는 동일한 프로세스가 alarm() 및 sleep() 함수를 모두 사용할 때 가능한 상호 작용을 알고 있어야 합니다. alarm() 및 setitimer()는 동일한 타이머를 공유합니다. 한 사람에게 호출하면 다른 호출의 사용을 방해할 수 있습니다. 다중 스레드 응용 프로그램에서 경보 생성을 위한 두 가지 선택 사항, 즉 호출 스레드에 대한 생성 또는 프로세스의 생성이 있었습니다. 첫 번째 옵션은 경보 상태가 프로세스별로 유지되고 alarm()의 마지막 호출에 의해 설정된 경보가 활성화될 유일한 옵션이기 때문에 특히 유용하지 않았을 것입니다. alarm() 함수는 항상 성공하며 오류를 나타내기 위해 반환 값이 예약되지 않습니다. 응용 프로그램 작성기는 인수 초의 형식과 alarm()의 반환 값이 서명되지 않았다는 점에 유의해야 합니다.

즉, 엄격하게 준수하는 POSIX 시스템 인터페이스 응용 프로그램은 ISO C 표준이 65535로 설정하는 {UINT_MAX}의 최소 보장 값보다 큰 값을 전달할 수 없으며 더 큰 값을 전달하는 응용 프로그램은 이식성을 제한합니다. . 다른 유형이 고려되었지만 16비트 int 형식을 포함한 기록 구현은 서명되지 않았거나 int. alarm() 및 setitimer(), ualarm() 또는 usleep()의 상호 작용 중 하나를 일관되게 사용합니다. 데이브 테일러는 정말 오랜 시간 동안 UNIX와 리눅스 시스템에 쉘 스크립트를 해킹하고있다. 그는 맥 OS X와 사악한 멋진 쉘 스크립트에 대한 유닉스를 학습의 저자입니다. 당신은 @DaveTaylor 트위터에서 그를 찾을 수 있습니다, 당신은 그의 기술 Q&A 사이트를 통해 그에게 도달 할 수 있습니다 : 데이브 테일러에게 문의. 버전 7 및 시스템 V를 포함한 많은 기록 구현을 통해 경보를 최대 2초 일찍 발생시수 있습니다. 다른 구현에서는 경보를 최대 1초 또는 1클럭까지 일찍 진드기하거나 조기에 발생시키지 않습니다. 후자는 가장 예측 가능한 동작을 제공하기 때문에 가장 적합한 것으로 간주됩니다. 따라서 응용 프로그램은 초 인수를 신호 전에 경과하고자 하는 최소 시간으로 선택할 수 있습니다.

alarm() 함수는 초 단위로 지정된 실시간 초 수가 경과한 후 프로세스에 대한 SIGALRM 신호를 생성하도록 시스템을 발생시게 됩니다. 프로세서 스케줄링 지연으로 인해 프로세스가 생성되는 즉시 신호를 처리하지 못할 수 있습니다. fork() 함수는 자식 프로세스에서 보류 중인 경보를 지웁니다. exec 함수 중 하나에 의해 생성된 새 프로세스 이미지는 이전 프로세스의 이미지에서 경보 신호에 남은 시간을 상속합니다. 초가 0이면 보류 중인 경보 요청(있는 경우)이 취소됩니다.