리눅스에서 "too many open files" 오류 문제
By 반달가면 | 2019년 9월 10일 |
리눅스에서 한꺼번에 많은 파일을 인자(argument)로 지정했을 때 "too many open files" 메시지가 나올 수 있는데, 이 경우에 최대로 열 수 있는 파일의 개수를 늘려주어야 한다. 우선 현재 설정된 기본값을 확인해 보자. ulimit 명령에서 열린 파일(open files)의 최대 제한값은 -n 옵션으로 확인 가능하다. 제한값의 종류는 hard limit와 soft limit 두가지가 있는데 hard limit는 말 그대로 넘을 수 없는 제한값이고, soft limit는 현재 설정되어 있는 값으로 반드시 hard limit 이하여야 한다. # 열린 파일 개수 최대치 확인(-n 옵션, hard limit) ulimit -Hn # 열린 파일 개수 최대치 확인(-n 옵션, so
[라즈베리파이] 시그널 - 커널 공간 시그널 함수 분석
By Guillermo Austin Kim | 2018년 12월 10일 |
시그널과 연관된 동작을 변경하면 유저 공간에서 sigaction() 함수를 호출하면 됩니다. 이 함수를 호출하면 시스템 콜 핸들러인 sys_rt_sigaction() 함수가 실행하며 커널 공간에서 시그널을 설정합니다. 이 실행 흐름을 표현하면 다음 그림과 같습니다. 유저 공간에서 sigaction() 함수를 호출하면 커널 공간에서 sys_rt_sigaction() 함수를 호출합니다. 유저 공간에서 sigaction() 함수를 호출하면 커널 공간에서 sys_rt_sigaction() 함수가 어떻게 실행하는지 바로 이해하기 어렵습니다. 이 과정을 조금 더 자세히 정리하면 다음과 같습니다.[유저 공간]1. r7에 sys_rt_sigaction() 함수에 해당하는 시스템 콜 번호인 174를 지정2. “sv
[라즈베리파이] 스케줄링: 프로세스 상태 관리
By Guillermo Austin Kim | 2019년 2월 6일 |
프로세스를 효율적으로 관리하기 위해서 커널은 프로세스에게 프로세스 상태를 부여합니다. 커널에서 정의한 프로세스 상태는 다음과 같습니다.[https://elixir.bootlin.com/linux/v4.14.70/source/tools/perf/builtin-sched.c]#define TASK_RUNNING0#define TASK_INTERRUPTIBLE1#define TASK_UNINTERRUPTIBLE2 커널에서 구동 중인 프로세스는 위에서 정의한 상태 정보를 갖고 있으며 커널은 이 정보를 기준으로 스케줄링을 수행합니다. 그러면 프로세스 상태는 어디에 저장할까요?프로세스를 관리하는 태스크 디스크립터 필드 중 state는 위에서 언급한 정수형 상태 정보를 저장합니다.[https://elixir.
[bash: awk] 항목의 합계를 계산할 때 예외 처리
By 반달가면 | 2018년 11월 9일 |
awk를 이용해서 합계를 구할 때, 입력이 유효하지 않은 경우가 발생할 수 있다. 예를 들어 특정 파일에서 grep으로 특정 항목만 추출한 후에 해당 항목의 합계를 구하려는데, 그 항목 자체가 파일에서 존재하지 않는 경우다. awk를 이용한 항목별 합계 계산 방법은 이전 게시물을 참고하자. 여기로 예를 하나 생각해 보자. my_data.txt의 파일이 아래와 같다. # my_data.txt 파일 내용 확인 (구분자는 탭) cat my_data.txt 2018.1.3 apple 10 2018.1.3 orange 3 2018.3.10 apple 2 위의 파일에 대해서 사과(apple)가 몇개 팔렸는지만 궁금하다면 아래와 같은 작업을 할 수 있다. # 사과(apple) 항목의 합계 계