메시지를 기록하는 방법은 무엇입니까? [폐쇄]

메시지를 기록하는 방법은 무엇입니까? [폐쇄]

나는 방법을 알고 싶다인쇄그렇다면 Linux 커널 로그 메시지는 뒤에서 어떻게 작동합니까?

답변1

우연이네, 방금 책에서 봤어리눅스 장치 드라이버v3. 제4장그 책은 이렇게 말합니다.

메시지를 녹음하는 방법

이 함수는 커널을 구성할 때 선택된 4KB에서 1MB 사이의 값인 바이트 길이의 순환 버퍼 printk에 메시지를 씁니다 . 그런 다음 함수는 메시지를 기다리고 있는 모든 프로세스, 즉 __LOG_BUF_LEN시스템 호출에서 syslog잠자기 상태이거나 읽고 있는 모든 프로세스를 깨웁니다 /proc/kmsg. 로깅 엔진에 대한 두 인터페이스는 거의 동일하지만, 읽기 작업은 /proc/kmsg로그 버퍼의 데이터를 소비하는 반면, syslog시스템 호출은 선택적으로 로그 데이터를 다른 프로세스에 맡기면서 로그 데이터를 반환할 수 있습니다. 일반적으로 /proc파일을 읽는 것이 더 쉽습니다 klogd. yes 이 dmesg명령은 버퍼를 플러시하지 않고 버퍼의 내용을 보는 데 사용할 수 있습니다. 실제로 이 명령은 stdout버퍼의 내용을 읽었는지 여부에 관계없이 반환합니다. .

커널 메시지를 수동으로 읽는 경우 stop 후에 리더가 차단하고 더 많은 데이터를 기다리기 때문에 파일이 FIFO처럼 보이는 klogd것을 알 수 있습니다 . 다른 프로세스가 이미 동일한 데이터를 읽고 있는 경우 경쟁을 벌이기 때문에 /proc이 방법으로 메시지를 읽을 수는 없습니다 . klogd순환 버퍼가 가득 차면 printk순환 버퍼의 시작 부분에 새 데이터를 추가하기 시작하여 가장 오래된 데이터를 덮어씁니다. 따라서 로깅 프로세스에서 이전 데이터가 손실됩니다. ...Linux 메시징 방법의 또 다른 특징은 printk인터럽트 처리기에서도 어디에서나 호출할 수 있고 인쇄할 수 있는 데이터 양에 제한이 없다는 것입니다. 유일한 단점은 일부 데이터가 손실될 수 있다는 것입니다.

관련 정보