실습> 쉘 스크립트를 이용해서 15번(SIGTERM) 시그널을 막아보자.
쉘 스크립트에서 시그널을 막는 방법
trap "명령어" 시그널번호
trap "명령어" 시그널이름
1. 스크립트 파일 생성
trap 이 없는 경우
[root@localhost ~]# vi process2.sh
| #!/bin/sh # trap "echo Hello" SIGTERM sleep 1000 |
[root@localhost ~]# chmod 755 process2.sh
[root@localhost ~]# ./process2.sh
2. 프로세스 확인
새로운 쉘을 열고 전체 프로세스를 확인해서 process2를 검색한다.
[root@localhost ~]# ps aux | grep process2
root 9515 0.0 0.2 113280 1180 pts/1 S+ 20:11 0:00 /bin/sh ./process2.sh
root 9518 0.0 0.2 116972 1016 pts/0 R+ 20:11 0:00 grep --color=auto process2
3. 시그널 전송
찾은 프로세스 번호를 kill로 시그널을 전송한다.
[root@localhost ~]# kill 9515
15번 신호를 받은 process2.sh 프로세스는 종료한다.
[root@localhost ~]# ./process2.sh
종료됨
4. 스크립트 파일 생성
trap 이 있는 경우
[root@localhost ~]# vi process2.sh
| #!/bin/sh trap "echo Hello" 15 sleep 1000 |
[root@localhost ~]# ./process2.sh
5. 프로세스 확인
다른 쉘을 열고 전체 프로세스를 확인해서 process2를 검색한다.
[root@localhost ~]# ps aux | grep process2
root 9543 0.0 0.2 113280 1184 pts/1 S+ 20:15 0:00 /bin/sh ./process2.sh
root 9546 0.0 0.2 116972 1016 pts/0 R+ 20:16 0:00 grep --color=auto process2
6. 시그널 전송
찾은 프로세스 번호를 kill로 시그널을 전송하면 process2.sh 가 종료가 안된다.
[root@localhost ~]# kill 9543
실습> SIGINT 시그널 막기
1. 스크립트 생성
trap이 없는 경우
[root@localhost ~]# vi process3.sh
| #!/bin/sh # trap "echo Hello" SIGINT while : do echo "시그널 테스트" sleep 1 done |
2. 퍼미션 변경
[root@localhost ~]# chmod 755 process3.sh
3. 프로세스 실행
프로세스가 실행중에 Ctrl + C 를 누르면 인터럽트 시그널(2, SIGINT)이 발생되서 프로세스가 종료된다.
[root@localhost ~]# ./process3.sh
시그널 테스트
시그널 테스트
시그널 테스트
시그널 테스트
시그널 테스트
^C <-- Ctrl + C 에 의해서 프로세스가 종료된다.
#
4. 스크립트 생성
trap이 있는 경우
[root@localhost ~]# vi process3.sh
| #!/bin/sh # SIGINT 시그널이 발생되는 화면에 Hello를 출력한다. trap "echo Hello" SIGINT while : do echo "시그널 테스트" sleep 1 done |
5. 퍼미션 변경
# chmod 755 process3.sh
6. 프로세스 실행
프로세스가 실행중에 Ctrl + C 를 누르면 인터럽트 시그널(2, SIGINT)이 발생되서 프로세스에게 전달된다.
하지만 process3.sh 스크립트는 trap 명령어를 이용해서 SIGINT 시그널을 무력화 시켰기 때문에
프로세스가 종료되지 않는다.
[root@localhost ~]# ./process3.sh
시그널 테스트
시그널 테스트
^CHello <-- trap 때문에 Ctrl + C 가 먹히지 않는다.
시그널 테스트
^CHello <-- trap 때문에 Ctrl + C 가 먹히지 않는다.
시그널 테스트
^CHello <-- trap 때문에 Ctrl + C 가 먹히지 않는다.
시그널 테스트
^CHello <-- trap 때문에 Ctrl + C 가 먹히지 않는다.
시그널 테스트
시그널 테스트
:
:
^C
7. 프로세스 종료
[root@localhost ~]# ps aux | grep process3
root 9715 0.0 0.2 113284 1408 pts/1 S+ 20:49 0:00 /bin/sh ./process3.sh
root 9769 0.0 0.2 116972 1016 pts/0 R+ 20:51 0:00 grep --color=auto process3
[root@localhost ~]# kill 9715
[root@localhost ~]# ./process3.sh
시그널 테스트
시그널 테스트
^CHello <-- trap 때문에 Ctrl + C 가 먹히지 않는다.
시그널 테스트
^CHello <-- trap 때문에 Ctrl + C 가 먹히지 않는다.
시그널 테스트
^CHello <-- trap 때문에 Ctrl + C 가 먹히지 않는다.
시그널 테스트
^CHello <-- trap 때문에 Ctrl + C 가 먹히지 않는다.
시그널 테스트
시그널 테스트
:
:
종료됨
'Linux > Linux 실습' 카테고리의 다른 글
| [Linux] 가상 호스트 설정하기 (0) | 2021.11.09 |
|---|---|
| [Linux] HTTP Method 정리 : GET/POST 방식 (0) | 2021.11.09 |
| 사용자 크론(Cron) 생성/제거 (0) | 2021.11.06 |
| yum 프로세스 강제 종료 (0) | 2021.11.06 |
| PATH 변수에 현재 디렉터리를 설정하는 않는 경우 (0) | 2021.11.06 |