분류 전체보기

유닉스

시그널

시그널 소프트웨어 인터럽트 프로세스에 뭔가 발생했음을 알리는 간단한 메시지를 비동기적으로 보내는 것 유닉스 운영체제거 프로세스에 전달함 발생하는 경우 0으로 나누기와 같이 프로그램에서 예외적인 상황이 일어난 경우 프로세스가 시그널을 보낼 수 있는 함수 사용해 다른 프로세스에 시그널 보내는 경우 (kill) 사용자가 ctrl+c 같은 인터럽트 키 입력한 경우 처리 방법 받은 시그널에 따라 기본 동작 수행함 (대부분 종료) 시그널 무시 - 시그널 무시하기로 지정하면 유닉스는 프로세스에 시그널 전달 안함 시그널 처리 함수를 지정해놓고 시그널 받으면 해당 함수를 호출해 처리 (시그널 핸들러) 시그널 발생하지 않도록 블록 처리 (큐에 쌓여 있다가 시그널 블록이 해제되면 전달됨) 시그널 종류 파일에 정의되어 있음 ..

유닉스

프로세스 동기화

불안정 상태의 프로세스(좀비 프로세스 등) 발생을 방지하기 위해서 부모와 자식 프로세스를 동기화 해야함 좀비 프로세스 실행 종료 후 자원 반납한 자식 프로세스의 종료 상태 정보를 부모 프로세스가 얻어가지 않는 경우에 발생함 정상적인 프로세스 종료 과정 자식 프로세스가 종료를 위해 부모 프로세스에 종료 상태 정보를 보냄 부모 프로세스는 이 정보를 받으면 프로세스 테이블에서 자식 프로세스 삭제 제거 방법 부모 프로세스가 wait 관련 함수를 호출해야 사라짐 (일반적인 방법으로는 제거 불가능) 고아 프로세스 자식보다 부모가 먼저 종료하면 자식은 고아 프로세스가 됨 init(PID 1) 프로세스의 자식 프로세스로 등록됨 프로세스 동기화 부모 프로세스는 자식 프로세스가 종료될 때까지 기다려야 함 wait 자식 p..

유닉스

Compiler directive

실행 시간 측정하기 #ifdef TIMES start = dclock(); #endif //시간 측정 부분 #ifdef TIMES end = dclock() - start(); printf(end); #endif $gcc -DTIMES -o t1 t1.c -D compiler directive 명령어 TIMES 임의로 이름 설정 가능함 #include #include #include #include main() { int status; pid_t pid; #ifdef TIMES struct timeval stime,etime; int time_result; #endif pid = fork(); #ifdef TIMES gettimeofday(&stime, NULL); #endif if (pid == 0) ..

유닉스

exec 함수군

path나 file에 지정한 명령이나 실행 파일을 실행함 arg, envp로 시작하는 인자를 parh 나 file에 지정한 파일의 main 함수에 전달함 exec 함수 실행되면 프로세스의 메모리 이미지는 실행파일로 바뀜 #include int execl(const char *path, const char *arg(), ... , const char *argn, (char *)0); int execv(const char *path, char *const argv[]); int execle(const char *path, const char *arg0, ... , const char *argn, (char *)0, char *const envp[]); int execve(const char *path, ch..

유닉스

프로세스 생성

프로그램 실행 - system 명령 실행하기 위해 쉘까지 동작시켜서 비효율적임 #include int system(const char *string); int main(){ int a; a = system("ps -ef | grep han > han.txt"); //system 안의 명령어 실행하고 0 반환 //모든 실행중인 process 중 han grep해서 나열한걸 han.txt에 저장 printf("Return Value : %d\n",a); } 프로세스 생성 - fork 일반적으로 exec와 같이 사용 parent는 다 한 후에 반드시 wait 해야함 새로운 프로세스 생성함 - 자식 프로세스 fork 함수 호출한 프로세스는 부모 프로세스가 됨 자식 프로세스는 부모 프로세스의 메모리 복사함 RUI..

유닉스

프로세스 정보

프로세스 목록 보기 ps : 현재 실행중인 프로세스 목록 보기 (로그인한 id 상태에서 돌고 있는 프로세스) -ef 옵션 : 서버에서 사용중인 전체 프로세스 보기 ps -ef | more ps -ef | grep 학번 -> 내 프로세스만 보고 싶을 때 top : CPU, swap, ... 확인 가능 zombit : 자식 process의 부모 process가 존재하지 않을 때 프로세스 식별 - getpid, getppid #include pid_t getpid(void); //함수 호출한 프로세스의 PID 리턴 pid_t getppid(void); //부모 프로세스의 PID 리턴, 바뀌지 않음 프로세스 그룹 관련 있는 프로세스 묶은 것으로 PGID(프로세스 그룹 ID)가 부여됨 프로세스 그룹 리더 그룹 구..

유닉스

시스템 정보

운영체제에 대한 기본 정보 검색 uname -a SunOS hanbit 5.10 Generic_118855-33 i86pc i386 i86pc 운영체제명, 호스트명, 릴리즈 레벨, 버전 번호, 하드웨어 형식명, CPU명, 플랫폼명 #include int uname(struct utsname *name); main() { struct utsname system_info; uname(&system_info); printf("OS name : %s\n",system_info.sysname); printf("Node name : %s\n",system_info.nodename); printf("Release : %s\n", system_info.release); printf("Version : %s\n", sy..

유닉스

디렉토리 관련 함수

., ..은 모든 디렉토리에 항상 존재하고 디렉토리 생성 시 자동 포함됨 mkdir - 디렉토리 생성 mkdir("han", mode) rmdir - 디렉토리 삭제 rmdir("han") rename - 디렉토리명 변경 rename("old", "newName") getcwd - 현재 작업 디렉토리 위치 getcwd(char *buf, size_t size); cwd = getswd(NULL, BUFSIZ); 또는 getswd(wd, BUFSIZ) 로 사용 가능 전자는 cwd에 경로 저장, 후자는 wd에 경로 저장됨 명령은 pwd chdir - 디렉토리 이동 chdir("path") opendir - 디렉토리 열기 close dir - 디렉토리 닫기 readdir - 디렉토리 정보 읽기 struct di..

hahihi
'분류 전체보기' 카테고리의 글 목록 (21 Page)