반응형

Linux/Linux_programing 25

IPC - 02. 신호 처리, sigaction 안정적 신호 인터페이스

/* * http://sosal.tistory.com/ * made by so_Sal */ 01.에서 봤던 kill 명령어를 더 자세히 보겠습니다. #include #include int kill(pid_t pid, int sig); 인자만 봐도 쉽게 알 수 있듯, kill 명령어에는 해당되는 프로세스 id와 명시적 sig를 전달합니다. #include int pause(void); 신호가 발생할 때까지 프로그램의 실행을 정지합니다. 신호를 받으면 호출되는 신호 처리부의 행동을 재개합니다. * 안정적 신호 인터페이스 sigaction #include int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); **** struc..

IPC - 01. 프로세스 신호 signal 주고받기

/* * http://sosal.tistory.com/ * made by so_Sal */ 프로세스 통신방법엔 대표적인 방법 3가지. siganl (신호), pipe (파이프), socket (소켓) 이 있다. signal은 돌맹이 pipe는 편지 socket는 소포에 비유할 수 있다. signal이 돌맹이에 비유한다는 것은, 짱똘을 던지면 내가 너에게 화가났다. 조약돌을 던지면 내가 너를 사랑한다. 등등.. 행동에 대해 미리 약속을 해놓은 후 그 행동을 통하여 서로 대화를 나누는 방법이랄까? 가수들이 무대에서 무슨 손가락 모양을 하면서 비밀스런 애인에게 사랑을 전달하는 방법도 이에 포함되겠다 ^-^;; pipe나 socket에 대한 비유는..음.. 이글은 SIGNAL 관련 글이므로 생략하겠습니다 ㅋㅋ ..

System - 05. wait() 프로세스 동기화

/* * http://sosal.tistory.com/ * made by so_Sal */ fork 함수로 생성된 자식 프로세스는 독립적으로 실행됩니다. 따라서 부모프로세스는 자식프로세스가 하는 일을 알 수 없고, 변수의 공유나 자식프로세스가 계속 살아있는지 등에 대한 정보를 기본적으로는 알 수 없습니다. #include #include pid_t wait(int *stat_loc); //call by reference stat_loc은 종료된 프로세스의 pid 값을 리턴하여 보통 pid_t 변수에다 저장합니다. ex) int stat_loc; pid_t child_pid; child_pid = wait(&stat_loc); wait 시스템콜은 자식프로세스중 하나가 종료될 때까지 부모 프로세스를 기다리게..

System - 04. fork 복제 프로세스 생성

/* * http://sosal.tistory.com/ * made by so_Sal */ #include #include pid_t fork(void); fork함수를 사용하면 multi - tasking system을 볼 수 있습니다. 부모프로세스가 fork함수를 호출하면 자식프로세스를 생성합니다. 파일 이름이 fork이고, fork 함수를 실행시키는 파일을 실행해보고, pstree를 통해서 현재 자신의 쉘에 띄워진 프로세스들을 봅시다. fork 라는 파일의 프로세스 아래에 자신과 똑같은 이름의 프로세스가 하나 더 생겼네요. 여기서 마지막 fork 프로세스를 실행시킨 첫번째 fork 프로세스를 부모프로세스, 새로 생긴 마지막 fork라는 프로세스는 자식 프로세스라고 합니다. fork함수로 실행된 각각..

System - 03. exec () 계열. 프로세스 이미지 대체

/* * http://sosal.tistory.com/ * made by so_Sal */ exec 함수라는것은 사실 없고, exec 계열이라고 말한다. exec로 시작되는 여러 함수를 통칭하여 exec 계열이라고 한다. exec 계열의 함수는 프로세스를 대체해버린다. system()함수는 프로세스 실행 도중에 다른 프로그램을 실행시켜 끝날때 까지 기다린후 새로 실행시킨 프로그램의 동작이 끝나게 되면 다시 원래 프로세스로 돌아와 일을 계속 한다. 하지만 exec 계열의 함수는 현재 프로세스를 새로운 프로그램으로 대체해버린다. exec 함수들을 이용하면 현재 프로그램의 실행을 다른 프로세스에게 넘겨줄 수 있다. 새 프로그램이 시작된 후에는 원래의 프로그래밍 더 이상 실행될 필요가 없다는 점에서 system..

Socket - 04. 다중 프로세스 네트워크 프로그래밍

/* * http://sosal.tistory.com/ * made by so_Sal */ 일반적으로 서버 프로그램은 불특정 다수의 클라이언트로부터 서비스 요청을 처리할 수 있는 다중 사용자 서버 (Multi-user server)로 개발됩니다. 다중 사용자 서버는 반복 처리 서버(Iterative Server)와 동시 처리 서버(Concurrent Server)로 개발될 수 있습니다. 반복 처리 서버는 개발하기 쉽고 이해하기 쉽지만, 사용자가 많아질 경우 클라이언트가 서비스를 위해 대기하는 시간이 길어질 수 있기 때문에 현실적으로 사용하기 어렵습니다. 동시 처리 서버는 다수의 클라이언트로부터 서비스 요청을 동시에 처리함으로써 서비스 제공을 보장합니다. 대표적인 모델은 다중프로세스와 다중 스레드 등이 존..

System - 02. system() 자식 프로세스

/* * http://sosal.tistory.com/ * made by so_Sal */ system() 함수에 대해 알아보겠습니다. #include int system(const char * string) system() 함수는 굉장한 편리함을 가져다 주는 함수입니다. 어떻게 보면 게으른 사람들의 전유물이기도 하지요.. shell? :: 사용자가 입력하는 명령어들을 기계어로 번역해주는 명령 해석기 쉘은 사용자가 운영체제와 대화할 수 있는 중간 역할자. 인터페이스가 됩니다. 쉘에서 사용자가 한 말을 받아 운영체제에 전해주고, 운영체제는 그 답을 쉘을 통해서 사용자에게 보여주게 되는것입니다. 쉘 역시 하나의 프로그램입니다. (bash, sh, csh 등 다양한 종류의 쉘이 있는데.. 리눅스 콘솔창에서 우..

System - 01. Process 개념

/* * http://sosal.tistory.com/ * made by so_Sal */ 프로세스 :: 컴퓨터 내에서 실행중인 프로그램을 일컫는 용어. 프로세스란건 아주 간단합니다. Ctrl + Alt + delete로 작업관리자를 켜봅시다. 프로세스 텝을 가보시면 프로세스들의 목록을 쭉~ 보실 수 있습니다. putty를 4개나 켜놨더니 프로세스에 4개가 올라와있네요. 항상 켜져있는 메신저 na**까지 보입니다. 프로세스, 쉽게 와닿나요? 리눅스는 위 그림의 윈도우와 같은 다중 태스킹 운영체제입니다. 한 시점에서 여러 개의 프로그램들이 실행되는데, 각 실행중인 프로그램은 하나의 프로세스가 되고, 물론 하나의 프로그램이 여러개의 프로세스가 될 수 있습니다. 따라서 여러 사용자들이 하나의 프로그램을 실행시..

Socket - 03. Client socket

/* * http://sosal.tistory.com/ * made by so_Sal */ #include int socket( int __domain, int __type, int __protocol); int connect(int socket, const struct sockaddr *address, size_t address_len); :: socket :: Socket - 01. Socket(), sockaddr 글을 참조하세요. :: connect :: Socket - 02. Socket - Server socket 글을 참조하세요. 기본적인 서버 - 클라이언트 소켓 구조에서 클라이언트측 소스는 무척이나 간단합니다. 정보를 주고 받을 수 있는 환경을 구축해야 하는 서버에 비하여 클라이언트는 전화..

반응형