특정 이벤트가 발생했을 때 프로세스에게 전달하는 신호. 즉, 프로세스끼리 서로 통신하기 위한 수단이다.
kill -l
혹은 man 7 signal
명령어를 통해 운영체제 마다 매크로로 정의되어 있는 시그널 상수를 확인할 수 있다.
이곳에 정의되어 있는 숫자는 핸들러에서 signo
로 활용할 수 있다.
시그널을 받은 프로세스는 다음 3가지 반응 중 하나의 액션을 취한다.
터미널을 종료시키는 인터럽트를 발생시켰을 때, 터미널이 종료되는게 아니라 우리의 minishell 프로그램만 종료되도록 액션을 변경해줘야 한다. 이런 핸들러 역할을 하는게 아래의 signal 함수이다.
#include <signal.h>
**sig_t signal(int sig, sig_t func);**
출처 : What's the difference between ^C and ^D for UNIX/Mac OS X terminal?
키보드로부터 오는 인터럽트 시그널
실행을 중지
하고 프로세스를 종료시킨 뒤 코어 덤프(core dump).
참고 : What's the use of \b in C?
The output of the/b
escape sequence depends on compiler to compiler.
Various possible outputs are:Non-destructive backspace : Here, a “\b” just makes the cursor shift backwards , without erasing any data and replacing the current character encountered with the new entered one.
The conventional backspace : Here, a “\b” means the normal backspace we use through our keyboards..
Example:
char name1[]=”sachin”;
char name2[]=”al”;
printf(“%s\b\b\b%s”, name1,name2);
situation 1 would be
sacaln
situation 2 would be
sacal.
cat -e | 같은 것을 터미널에 입력한 뒤 자식프로세스가 대기 상태일 때 키보드 인터럽트가 발생되면 터미널에 출력되는 메세지가 부모 프로세스 일때랑 다르다.
^C
가 쉘에 출력되고 안되고의 차이가 있음
자식프로세스 없을 때의 시그널은 pid==-1일 때로 분기해서 설정하기