table of contents
INIT(8) | Linux System Administrator's Manual | INIT(8) |
NAME¶
init, telinit - 초기화 프로세스 제어
SYNOPSIS¶
/sbin/init [ -t sec ] [ 0123456SsQq ]
/sbin/telinit [ -t sec ] [ 0123456sSQqabc ]
DESCRIPTION¶
Init¶
Init 프로세스는 모든 프로세스의 아버지다. 이것은 /etc/inittab 파일(inittab(5) 참조)을 찾아, 지정한 스크립트를 실행한다. 이 파일에는 사용자가 접속할 수 있도록 getty 처리를 하는데, 이때 init가 사용된다. 또한 이 파일은 특정 시스템에서 필요한, 자동으로 실행되어야 하는 프로세스들을 제어한다.
runlevel이란 존재하는 프로세스의 선택된 그룹만을 허락하는 시스템의 소프트웨어 환경이다. 각각의 runlevel에서, init에 의해 생성되는 프로세스들은 /etc/inittab 파일에서 정의된다. Init는 runlevel이 0부터 6, S 또는 s인 여덟 종류 중 하나에 존재 할 수 있다. runlevel 값은 시스템 관리자가 /sbin/telinit를 실행해서 바뀐다. telinit는 runlevel을 바꾸어라는 신호를 init에게 알린다.
커널 부팅이 끝나면, 마지막으로 init가 실행되는데, 이때 /etc/inittab 파일을 찾아 그 안에 정의된 initdefault (inittab(5) 참조) 부분을 읽는다. 그리고 그곳에 정의된 runlevel을 현재 level로 하여 나머지 작업을 계속한다. 이때, /etc/inittab 파일이 없거나, initdefault 정의가 없으면, 콘솔에서 직접 runlevel을 입력해야 한다.
runlevel이 S나 s이면, 단일 사용자 모드가 진행되면, 이때는 /etc/initttab 파일이 필요없다. 단일 사용자 모드에서는 /dev/console에 의해 /bin/sh가 호출된다.
단일 사용자 모드가 되면, init는 /etc/ioctl.save에서 지정한 콘솔의 ioctl(2)을 읽는다. 이때, 이 파일이 없으면, init는 라인을 9600 baud, CLOCAL로 초기화 한다. 단일 사용자 모드를 떠나면, init는 현재 콘솔의 ioctl 설정을 /etc/ioctl.save 파일에 저장하고, 다음 단일 사용자 모드에서 다시 사용한다.
다중 사용자 모드로 들어가게 되면, init는 먼저 사용자가 로그인 할 수 있는 마운트된 파일 시스템의 사용을 위해 boot, bootwait 부분을 처리하고, 다음, 나머지 부분들을 처리한다. (inittab에서 정의되고 있음)
한 새로운 프로세스를 시작할 때는 먼저 /etc/initscript 파일이 있는지 확인을 하고, 있다면, 그 스크립트에 따라 프로세스를 시작한다.
각 하위 프로세스들이 끝날 때, init는 /var/run/utmp, /var/log/wtmp 파일있다면, 그 파일에 그 프로세스들의 마침 정보들(언제 끝났고, 왜 끝났고... 이런 정보)을 기록한다.
지정한 그 프로세스를 모두 실행 한 뒤, init는 그 프로세스를 마칠 의존적인 프로세스 중 하나나,powerfail 시그날이나, 시스템의 runleve을 바꾸는 /sbin/telinit에서 보내는 시그날을 기다린다. 이 셋 중 하나가 발생했을 때, init는 /etc/inittab 파일을 다시 읽는다. 이 파일에는 언제든지 새로운 항목이 추가 될 수 있다. 하지만 그 효과는 위에서 언급한 그 세가지 경우가 되어 init가 그 파일을 읽을 때 나타난다. 이런 상황이 아닌데도 /etc/inittab 파일을 읽어야 할 경우에는 Q 나 q 명령을 사용한다.
만약 단일 사용자
모드가 아닌데, powerfail
시그날이 발생하면,
init는 /etc/inittab 파일에서
특별하게 지정된
powerfail 부분을 실행한다.
runlevel이 바뀌었을 때, 그 새로운 runlevel에 대해서 특별히 대처하지 않게 지정된 모든 프로세스에게 init는 경고 시스날인 SIGTERM을 보낸다. 그리고 나서 5초동안 기다리고는 종료 시그날인 SIGKILL 을 그 프로세스들에게 보낸다. 이때, init는 그 프로세스들을 위해 원래 만들어진. 같은 프로세스 그룹 안에 남아 있다고 가정한다는 것을 주의하라. 만약 어떤 프로세스가 자신의 프로세스 그룹을 바꾸었다면, 이 프로세스는 위에서 언급한 시그날들을 받지 못한다. 이런 프로세스들은 사용자가 직접 종료해야한다.
telinit¶
/sbin/telinit는 /sbin/init에 링크되어 있는 명령이다. 이것은 한 문자의 명령행 인자와 적당한 작업을 수행할 signals init를 가진다. 여기서 사용할 수 있는 한 문자 명령행 인자는 다음과 같다. /sbin/telinit:
- 0,1,2,3,4,5,6
- /sbin/init에게 runlevel이 바뀌었음을 알린다.
- a,b,c
- /etc/inittab 파일에서 지정한 a,b,c runlevel 부분을 처리하라고 init에게 알린다.
- Q or q
- /sbin/init가 /etc/inittab 파일을 다시 읽도록 지시한다.
- S or s
- /sbin/init에게 단일 사용자 모드로 전환하라고 알린다.
또한 init가 TERM 시그날을 보내고 나서 몇 초를 기다린 후, KILL 시그날을 프로세스들에게 보낼지를 지정할 수 있다. 초기값은 5초다. 이 것은 -t sec 옵션으로 지정한다.
/sbin/telinit 명령은 단지 시스템 관지자에 의해서만 호출 될 수 있다.
RUNLEVELS¶
init와 관계되는 runlevel은 0, 1, 6이다. 0은 시스템 종료에, 6은 시스템 재시동(reboot)에, 1은 단일 사용자 모드에 사용된다. runlevel S는 바로 처리 되지 않고, runlevel 1로 바뀌었을 때 처리 되는 부분에서 처리된다. 자세한 이야기는 shutdown(1), inittab(5) 매뉴얼 페이지를 참조한다.
runlevel 7-9도 사용할 수 있지만, 이 문서에서는 다루지 않는다. 이것은 "전통적인" Unix 환경에서는 사용되지 않는 값들이기 때문이다. 일반적으로 runlevel S나 s 값이 runlevel 7-9와 같은 역활을 한다. 이것은 단지 하나의 별칭으로 사용된다. 이 풀그림 제작자가 sysvinit를 만들때 사용한 시스템에서 이 값들을 사용하기 때문에 남겨두었을 뿐이다.
FILES¶
/etc/inittab /etc/initscript /dev/console /etc/ioctl.save /var/run/utmp /var/log/wtmp /dev/initctl
ENVIRONMENT¶
init에서는 다음과 같은 환경 변수를 사용한다.
- PATH
- 초기값: /bin:/usr/bin:
- INIT_VERSION
- init의 버전 정보. 이것은 init 스크립트 작성에서 요용하게 쓰인다.
- RUNLEVEL
- 시스템의 현재 runlevel.
- PREVLEVEL
- 이전 runlevel.(runlevel 전환 때에 요용하게 쓰인다.)
BOOTFLAGS¶
부트 관리자(예, LILO)에서 다음 인자들을 사용할 수도 있고, 생략할 수도 있다.
- S, single
- 단일 사용자 모드로 부팅한다. 이 모드에서는 /etc/inittab 파일을 검사하고, 단일 사용자 모드의 쉘이 시작되기 전에, rc 스크립트가 일반적으로 실행된다.
- 1-5
- 지정한 runlevel로 부팅한다.
- -b, emergency
- 다른 어떠한 시작 스크립트 없이 바로 단일 사용자 모드로 부팅한다.
CONFORMING TO¶
Init는 System V init와 호환이 된다. 이것은 /etc/init.d, /etc/rc{runlevel}.d 경로안에 있는 스크립트들을 실행한다. 자신의 시스템에 적용하려면, 먼저 /etc/init.d 경로 안에 있는 스크립트들이 어떻게 작동할 것인지에 대해서 이야기하고 있는 README 파일을 읽어 보라.
WARNINGS¶
init는 어떤 프로세스가 실행될 당시에 소속되어 있는 프로세스 그룹안에 계속 있다고 가정한다. 그렇기 때문에, 만약 그 프로세스가 그 그룹에 더 이상 소속되지 않는다면, runlevel이 바뀌었어 그 프로세스를 마쳐야 할때, 제대로 마칠수 없게 된다.
DIAGNOSTICS¶
만약 2분 동안 10번 이상 init가 계속 해서 호출 된다면, init는 이런 상태를 오류로 가정한다. 그리고는 시스템 콘솔에 오류 메시지를 보여준다. 그리고, 5분간 프로세스 생성을 중지하고, 발생되는 시그날을 받는다. 이것은 시스템 리소스의 낭비를 막기 위한 조치이다.
AUTHOR¶
Miquel van Smoorenburg (miquels@cistron.nl), initial manual page by Michael Haardt (u31b3hs@pool.informatik.rwth-aachen.de).
SEE ALSO¶
getty(1), login(1), sh(1), who(1), shutdown(1), kill(2), inittab(5), initscript(5), utmp(5)
May 6, 1996 |