×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 2,101,745명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)
반응형


- 본 내용은 Linux (Ubuntu 14.04 lts)를 기반으로 제작되었습니다. -







계속해서 fork, wait, kill같은 함수들을 알아보는 이유는, 


결국 소켓 프로그래밍의 마지막은 다중 사용자에게 대해 서버가 처리해 줄것들을 프로그래밍 하기위함이다.


이번에는 kill 함수에 대해 알아본다.


kill 함수의 원형은 다음과 같다.


int kill(pid_t pid, int signal);


0을 리턴하면 성공, 실패하면 -1을 리턴한다.


pid는 말 그대로 프로세스 id를 적는 부분이고, 


signal은 http://www.crocus.co.kr/245 를 참조하여 확인할 수 있다. 



아래 소스 코드의 동작 과정은 다음과 같다.


처음에 부모 프로세스가 자식 프로세스를 50번 fork()한다.


이때 50번 하는 동안 부모 프로세스에게 할당된 시간이 timeout이 되거나, 다른 인터럽트에 의해 부모 프로세스가 


swap되고, 자식 프로세스의 차례가 오면 자식 프로세스는 pid가 0이기에 while문을 돌게된다.


그 후, 시간이 지나 부모 프로세스차례가 와서 50번의 fork()를 끝낸 후 두번째 for문에서 자식 프로세스를 


하나씩 죽이는 과정을 취한다. 자식 프로세스가 다 죽으면 마지막에 부모 프로세스가 종료된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <signal.h>
 
int main()
{
    int N = 50;
    pid_t pid[N]; /* process id */
    int childStatus;
    int i;
    for (i = 0; i < N; i++)
    {
        pid[i] = fork();
        if (pid[i] == 0)
        {
            while(1)
                printf("Child Process :: %d is never terminate\n",getpid());
        }        
        
    }
 
    for (i = 0; i < N; i++)
    {
        printf("Killing Child Process :: %d\n",pid[i]);
 
        kill(pid[i],SIGINT);
        // The Parent Process kills the child process by sending a SIGINT signal
    }
 
    printf("Now Parent Process is terminate\n");
 
    return 0;
}
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus





다음은 실제 실행 과정을 동영상으로 담아두었다.


아래 동영상이 화질이 좋지 않다면 다음 주소를 이용하길 바란다.


https://youtu.be/8k5RUK6M5AU











반응형