Hi there!

I am a student studying computer science.

시스템 프로그래밍

시스템 프로그래밍 5장 - Process Control : Daemon

만능성구 2020. 5. 5. 20:34
728x90

Daemon이란?

terminal과 연결관계가 없는 background process

- booting을 할때 root로 부터 시작되거나, 특별한 user group에서 실행된다.

- crond, sshd, // d로 끝난다.

Daemon 요구조건

1. init이라는 자식 process로 실행되어야한다.

2. 현재 terminal과 연결되지 않아야한다.

Daemon 만들기

- 일반 user가 만들어내는 process들은 일반적으로 shell을 이용하기 때문에 shell의 자식 process다

그리고 모든 shell은 init이라는 곳에서 생성되는 최초의 program 이므로 일반적인 processs는 모두 init의 자식이다.

그러므로 1조건을 충적한다.

- 2조건 만족하기 위해 아래를 뜨른다

1. fork로 process생성1

2. 부모는 exit로 종료한다.1

3. 자식에서 setsid를 호출해서 새로운 Session을 만들어서 새로운 prosess그룹과 session을 부여한다.3

4. 현재 process가 돌아가는 환경인 dir를 다른 dir로 변경시킨다.

5. 부모 process에서 사용하는 모든 file descriptor를 close한다.0

6. File descriptor 0(stdin), File descriptor 1(stdout), File descriptor 2 (sterrer)를2

device null에 연결한다.

#include <sys/types.h>
#include <unistd.h>

pid_t setsid(void); // create new session

daemon을 생성하기 위한 새로운 session을 만든다.

setssid를 호출한 하나의 새로운 session을 만들고 해당 session leader가 된다.

이전 session의 terminal을 사용할 수 없다.

생성된 session의 process들은 제어할 terminal 이 없다

return 

zombie -ex

child 생성하고 불러줄지 않고 부모를 종료하면 부모없는 process - > zombie// 새로운 세션을 만들지 않으면!


#include <stdlib.h>

int system(const char *string);

shell command를 그대로 실행하게 하는 것 string을 이 process의 shell에서 실행

string : option을 포함한 shell command

return shell exit code / -1

strcpy(des, source)

str(cmdstr, "/bin/ls/")


#include <sys/times.h>

clock_t times(struct tms *buf);
	Returns:
struct tms (
	clock_t tms_utime; /* user cpu time */
	clock_t tms_stime; /* system cpu time */
	clock_t tms_cutime; /* child user cpu time */
	clock_t tms_cstime; /* child system cpu time */
}

다른 program의 수행시간을 측정하는 program

wall clock time: the amount of time the process takes to run and depends on the system loads.

tms : data struct 

- tms_utime : user cpu time    // user level에서

- tms_stime : system cpu time // kernel system level에서 

- tms_cutime : child user cpu time //child의 user level에서

- tms_cstime : child system cpu time // child의 kernel system level에서 

return 경과된 wall clock time / -1

초당 clock_tick을 나누어준다.

728x90