본문 바로가기

반응형

개발/Linux

프로세스와 신호 - 신호 보내기 신호 보내기 #include #include int kill(pid_t pid, int sig); - sig로 지정된 신호를 pid로 지정된 프로세스에게 보낸다. - 성공시에는 0을 리턴하고, 실패 하면 -1을 리턴한다.- 실패의 경우에서 신호가 유효하지 않으면 errno 에는 EINVAL이, 권한이 없으면 EPERM, 대상 프로세스가 존재하지 않으면 ESRCH 가 설정된다.예제 소스실행 결과 - kill(getppid(), sigalrm) 자식이 여기서 부모 pid를 얻어서 신호를 보낸다 그리고 끝 - 부모는 (void) signal(~~ 여기서 받아서 ding 를 호출- 그래서 아래 Ding가 출력되고 done가 출력된 후 종료 - 느린 시스템 호출이 발생하는 도중 다른 신호가 발생하면 오류를 돌려준.. 더보기
프로세스와 신호 - 신호 신호- 신호는 유닉스와 리눅스 시스템이 어떤 조건에 따라 발생시키는 사건(event)이다. 시스템이 특정 시건에 반응해서 특정 프로세스에 신호를 보내면, 신호를 받은 프로세스는 그에 맞는 행동을 취하게 된다. - 신호가 발생하는 것은 일으킨다(raise)라고 칭하며, 프로세스가 신호를 감지해서 반응하는 것은 잡는다(catch)라고 한다. 프로그램 안에서 실호를 처리할 때는 signal 라이브러리 함수를 사용#include vodi (*signal(int sig, void(*func)(int)))(int); 예제 소스실행 결과처음 ctrl+c에 의해 SIGINT가 발생 하면서 ouch가 호출된다. 메시지가 출력된 후 다시 제어권을 main으로 반환한다.두번째 ctrl+c 가 눌러지면 기본 행동이 일어난다... 더보기
프로세스와 신호 - 입출력 재지정 입출력 재지정- 입력된 자료를 읽어 적절히 변환한 결되를 표준 출력으로 내보내는 프로그램예제 소스결과 더보기
프로세스와 신호 - 좀비 프로세스 좀비 프로세스- 자식프로세스가 종료되어도 부모와의 관계는 부모가 wait를 호출하거나 종료될 때까지 유지된다.그러므로 운영체제는 자식 프로세스가 종료되어도 시스템안에 남겨둔다. 이렇게 부모와 연관 관계가 있는 프로세스를 가리켜 소멸된(defunct) 프로세스 또는 좀비 프로세스(zombie process)라고 부른다. 라는 표시가 좀피 프로세스라는 뜻 라고 표시 되기도 한다. 더보기
프로세스와 신호 - 프로세스 종료 기다리기 프로세스 종료 기다리기-fork 로 띄운 자식 프로세스는 고유한 수명을 가지며, 부모 프로세스와는 동립적으로 실행된다. 그런데 부모 프로세스에서 자식 프로세스가 종료되었는지를 알아야 하는 경우가 있다. 자식 프로세스가 끝날때 까지 기다리게 하려면 wait함수를 사용한다. #include #include pid_t wait(int *stat_loc); 예제 소스 실행 결과 더보기
프로세스와 신호 - 프로세스 이미지 복제 프로세스 이미지 복제- 동시에 여러 기능을 수행하고자 할 때는 스레드를 사용할 수도 있고, init이 하는 것 처럼 한 프로그램안에서 개벌젹인 프로세스를 생성할 수 있다. - fork 함수를 호출하여 생성할 수 있다. 이 함수는 현재 프로세스를 복재해서 프로세스 테이블에 새로운 항목을 생성한다. (exec처럼 현재 프로세스를 다른 프로세스로 "대체"하는 것이 아니라) 새 프로세스는 현재 프로세스의 여러 특성들을 물려받는다. 새 프로세스는 원래의 프로세스와 동알한 코드를 수행한다. 그러나 자료공간 환경 파일 서술자들은 개별적이다. #include #include pid_t fork(void); 복제를 실패하면 -1을 돌려준다.부모가 가질 수 있는 자실 프로세스 개수의 한계를 넘거나, 프로세스 테이블이 꽉찼.. 더보기
프로세스와 신호 - 프로세스 이미지 대체하기 프로세스 이미지 대체하기#include char **environ; int execl (const char *path, const char *arg0, ..., (char *)0);int execlp (const char *file, const char *arg0, ..., (char *)0);int execle (const char *path, const char *arg0, ..., (char *)0, char llconst envp[]);int execv (const char *path, char *const argv[]);int execvp (const char *file, char *const argv[]);int execl (const char *path, char *const argv[], .. 더보기
프로세스와 신호 - 새 프로세스 시작하기 새 프로세스 시작하기 #include int system (const char *string)- system 함수는 string 매개변수로 주어진 명령을 실행하고 그것이 끝날 때까지 기다린다. - 주어진 명령을 실행할 수 없으면 127을, 그 외의 오류가 발생하면 -1을 돌려준다. - 실행 했을 경우에는 중료 코드를 돌려준다.예제 실행결과 - system은 셸을 이용해서 프로그램을 실행하므로, 원하는 프로그램을 띄우기전 셸을 띄워야 하기 때문에 비효율적이고 리눅스설치본에 상당히 의존적이라 좋은 방법이 되지 못한다. 더보기

반응형