방금 학습을 시작했고 journald
해당 함수 내에서 main()
(in journald.c
) 함수 호출을 발견했습니다.log_set_prohibit_ipc(true);
기본적으로 왜 true로 설정되어 있는지 말해 줄 수 있는 사람이 있나요?
답변1
systemd
소스 코드 에서 다음 선언을 볼 수 있습니다 src/basic/log.h
.
/* If turned on, then we'll never use IPC-based logging,
* i.e. never log to syslog or the journal. We'll only
* log to stderr, the console or kmsg */
void log_set_prohibit_ipc(bool b);
journald
따라서 이 함수는 로그 쓰기를 차단하는 것처럼 보입니다 . 실제로 모든 용도를 살펴보면 다음과 같습니다.
stew ~/src/systemd-246.1/src $ grep -rw log_set_prohibit_ipc
shutdown/shutdown.c: log_set_prohibit_ipc(true);
shared/generator.c: log_set_prohibit_ipc(true);
journal/journald.c: log_set_prohibit_ipc(true);
core/manager.c: log_set_prohibit_ipc(!manager_journal_is_running(m));
core/main.c: log_set_prohibit_ipc(true);
basic/log.h:void log_set_prohibit_ipc(bool b);
basic/log.c:void log_set_prohibit_ipc(bool b) {
(주 시스템 관리자)를 제외한 모든 위치 log_set_prohibit_ipc( ... )
로 설정되어 있는 것을 볼 수 있습니다 . 그렇더라도 관리자는 다른 관리자가 실행되고 있지 않을 때만 기록합니다.true
core/manager.c
여기에는 몇 가지 추측이 있지만 이는 마스터 관리자가 중복이나 내부 로깅을 피하면서 다른 시스템 구성 요소를 대신하여 항목을 기록한다는 것을 의미한다고 추측합니다. 이는 다중 작성자 동시성 문제를 단순화하기 위한 싱글톤 디자인 패턴의 구현일 수도 있습니다.