리눅스 시스템 프로그래밍이나, 혹은 c언어 시간에 signal은 잠깐 접해볼 기회가 있을 겁니다. 이 글에서는 signal 함수를 쓰고 있습니다만, 실습으로만 쓰고 있다는 점 참고 부탁드립니다. sigaction 쓰세요. signal이 들어오면 처리하는 방법은 몇 가지가 있습니다. 그냥 아무 로직도 태우지 않거나, 무시하거나, 혹은 해당 시그널이 발생했을 때 잡아서 특정 루틴을 수행하던지. 그런데, 이 중 몇 가지 예외가 있는데요. 무시하거나 잡을 수 없는 signal이 두 개 있어요. SIGKILL과 SIGSTOP. 이 둘을 간단하게 보도록 하겠습니다. 먼저, SIGINT, SIGKILL, SIGSTOP, SIGTSTP 이렇게 4개의 signal 번호를 얻어봅시다. 제 시스템에서는 2, 9, 19, 2..
signal 검색 결과
django에서 블로그를 생성할 때 기본 포스트가 생성되게 하고 싶습니다. 혹은, 아이디를 만들 때 포스트가 새로 만들어지게 하고 싶습니다. 이럴 때 어떻게 하면 좋을까요? view 단에서 user가 만들어지면 처리하게 할 수도 있겠습니다만, signal 등으로 처리하는 것도 나쁘지 않은 선택입니다. 다만, 공식 문서에서는 warning에 이해하기 힘든 로직이 작성될 수 있다고 하는데요. 레코드가 추가되는 부분하고, 그럴 때 발생하는 signal을 처리하는 부분이 분리가 되어 있다 보니 그러지 않나 싶습니다. 사실 linux에서 sigaction을 써 보셨다면 공감하실 수도 있을 듯 합니다. 그럼에도 불구하고, 저는 생각보다 유용하게 써먹었습니다. 그래서, 이번 시간에는 signal을 알아보도록 하겠습니..
리눅스에는 kill 명령이 있습니다. 이에 대해서 간단하게 알아보겠습니다. 그 전에, 이 명령을 이해하기 위해서 필요한 시그널에 대해서만 잠깐 짚고 넘어가겠습니다. 먼저, Term, Ign, Core, Stop, Cont 같은 것들이 있는데요. 이는 아래 그림의 Action을 보기 위해서 봐야 할 값들입니다. 이 중에 Term은 디폴트 액션이 종료인 것을 의미합니다. 예를 들어, SIGKILL을 날리면, 종료가 됩니다. 디폴트가 Term이라는 이야기입니다. 각 Signal들을 보냈을 때 디폴트 action과 간단한 설명 등을 나타내는데요. SIGHUP는 저번에 한 번 언급을 했었습니다. putty로 ssh 접속을 했습니다. A라는 프로세스를 돌렸습니다. 그 상태에서, 접속을 끊었습니다. 그랬더니 어랏? ..
ssh로 연결한 세션이 끊어지면 어떻게 될까요? 1.c는 위와 같습니다. 아시다시피, 그냥 의미없이 계속 무한 루프를 도는 코드입니다. 이것을 컴파일 해서 돌려보겠습니다. strace를 찍어볼 겁니다. 여기서, -o 옵션은 파일에다가, trace 내용을 뽑는 것입니다. strace -o trace.txt는 trace.txt에 트레이스를 한 내용을 출력합니다. ssh 접속을 끊은 다음에 다시 접속한 다음에, trace.txt를 열어봅시다. 그러면, SIGHUP라는 내용이 나왔음을 알 수 있습니다. signal(7) 문서를 보면 몇 가지 행동이 나와 있습니다. 이 중에서, Term은, Default action이 process를 종료하는 것임을 뜻합니다. Ign은 무시한다는 의미입니다. 밑에 부분을 보면, ..
저번 시간에 함수 포인터에 대해서 언급을 했고, clockwise 해석법에 대해서도 간단하게 언급을 했으니, 다소 복잡한 것을 해석해 보도록 하겠습니다. C언어에는 signal 함수가 있는데요. 이것의 선언부만 간단하게 해석해 보도록 하겠습니다. 간단해 보이진 않지만요. 사실 원래는, void (*signal(int,void (*)(int)))(int); 입니다. 먼저, keyword를 찾아봅시다. signal입니다. 그리고 큰 덩어리 하나 찾아봅시다. signal에서 시계 방향으로 돌기 시작했을 때 맨 먼저 만나는 '('과 쌍을 이루는 ')'을 찾아서, 표시를 해 주었는데요. 이 부분은 안쪽에서 해석을 해 보도록 하겠습니다. 먼저, keyword인 signal에서, 오른쪽을 먼저 보니까 ()이 보였습니..
최근댓글