티스토리 뷰

Study/Linux

[Linux] Service

생각많은 소심남 2016. 4. 24. 23:04

OS에서는 system이 booting했을 때 생성되면서, shutdown될때까지 memory에 상주해있는 process들이 존재하는데, 이런 process들을 service라고 한다. 보통 어떤 service가 수행되는지를 확인하고자 할경우 /etc/init.d/을 살펴보면 된다.


몇가지 service 종류를 살펴보면

- bluetooth : bluetooth connection 관련 service

- cron : 일종의 task scheduler

- cups : printer handling

- halt : system shutdown command

- 등등..


참고로 여기서 실행되는 service 중에 rcS라는게 바로 run configuration script라고 해서 제일 먼저 실행되는 script이다. 그래서 보통 kernel porting을 할때 여기 script에 filesystem 같은 것을 mount하거나 다른 shell script 를 실행시키는 등의 작업을 수행하게 한다. 여기까지 왔다는 것은 드디어 user level에서 실행되는 service가 있다는 것을 의미하기 때문이다. 여기서 rcS 내용을 살펴보면 다시 rc 라는 파일을 실행하게 하는 명령구문이 들어있는데 이 끝을 따라가면 그 내부 코드에서 runlevel과 관련한 작업들이 수행되는 것을 알 수 있다. 

 아무튼 위의 init.d 폴더에 들어 있는 binary들이 모두 service들인데, 이 service의 동작을 제어할 수 있다. binary에 따라서 어떤 status를 가지고 있는지 혹은 멈추게 할 수도 있고, 다시 실행시킬 수 있다. 가령 이런 예를 들 수 있다. 어떤 iptable을 가지고 있는 상태에서 새로운 network에 접속했을때는 그 iptable이 mapping되도록 network service를 재시작해줘야한다. 그럴때 보통 service 명령을 사용해서 재시작하게 할 수 있다. 



해당 service에서 어떤 명령들이 주어지는지를 확인하려면 위의 명령에서 restart전까지만 치고 수행하면 된다.

그러면 수행가능한 명령 list들이 나열되고 여기서 하나를 선택해서 수행하면 되는데, 위의 예는 cups의 status를 확인한 것이다. 이 결과로 우리는 cups service가 start되었고, 현재 running 상태로 있으며, pid 40669로 수행되고 있다는 것을 알 수 있다. 여기서 알 수 있는 것처럼 service도 일종의 process이며, unique한 pid를 가진다. 물론 kill 같은 명령어도 쓸 수 있다.

 사실 service 명령 말고도 service의 동작을 제어할 수 있는 명령이 여러개 있다. 예를 들어서 invoke-rc.d, status, update-rc.d 같은게 그 역할을 대신할 수 있는데, 사실 쓰다보면 service만 가지고도 각 명령어들의 기능을 모두 수행할 수 있다는 것을 알 수 있다. 그냥 그런 명령어가 있구나 정도로만 알면 좋을듯 싶다.

댓글