Linux/System Programming

    [프로세스 관리] 3. 프로세스 종료

    [프로세스 관리] 3. 프로세스 종료

    프로세스 종료에 대해 알아보겠습니다. 1) exit() 시스템 콜 기본적으로 많이 사용되는 프로세스 종료 표준함수는 exit() 시스템 콜입니다. exit 시스템 콜의 형태는 아래와 같습니다. #include void exit(int status); 입력 인자 void없음 반환 값 int 프로세스의 종료 상태를 나타내기 위한 값 생각해보시면, exit() 시스템 콜이 호출되게 되면, 프로세스가 즉시 종료되기 때문에 반환 값이 있을 수가 없습니다. 그럼 프로세스가 정상적으로 종료되었는지 확인하는 방법은 무엇일까요?? 바로 status 인자를 이용하여 프로세스의 종료 상태를 확인할 수 있습니다. 즉 status가 입력 인자이면서 반환 값 용도로 사용 되는 것이죠. status 인자는 셸 같은 다른 프로그램에..

    리눅스 시스템 에러 - errno

    /usr/include/asm/errno.h 참고하였습니다. #define EPERM 1 /* Operation not permitted */ #define ENOENT 2 /* No such file or directory */ #define ESRCH 3 /* No such process */ #define EINTR 4 /* Interrupted system call */ #define EIO 5 /* I/O error */ #define ENXIO 6 /* No such device or address */ #define E2BIG 7 /* Arg list too long */ #define ENOEXEC 8 /* Exec format error */ #define EBADF 9 /* Bad fi..

    [프로세스 관리] 2. 새로운 프로세스 실행

    [프로세스 관리] 2. 새로운 프로세스 실행

    앞에서 프로세스의 PID에 대해서 알아보았는데요, 굉장히 간단하게 getpid() 시스템 콜을 이용해서 자신의 프로세스 ID를 알 수 있었습니다. 이번에는 정말 새로운 프로세스를 생성하는 시스템 콜에 대해 알아보고, 각 차이점에 대해 알아봅시다. 리눅스에서 시스템 콜을 이용하여 프로세스를 실행하면 두가지 방식이 있습니다. 프로그램 바이너리를 메모리에 적재하고 프로세스의 주소공간에 있는 이전 내용을 대체하고 새로운 프로세스를 실행하거나, 부모 프로세스의 주소공간 등을 그대로 복사 한 후 새로운 프로세스를 실행하는 방식입니다. 총 3가지 시스템 콜에 대해서 알아볼텐데요, exec 계열의 시스템 콜, fork 그리고 vfork 까지 알아볼게요. 먼저, exec 시스템 콜에 대해 알아보겠습니다.exec 계열의 ..

    [프로세스 관리] 1. 프로세스의 ID 얻기

    [프로세스 관리] 1. 프로세스의 ID 얻기

    앞에서 프로세스에 대해서 간단히 설명드렸는데요,그 내용 중에 프로세스를 식별할 수 있는 번호 ! PID를 간단하게 설명했었습니다. 이번 포스팅에서는 자신과 자신의 부모의 PID를 얻어오는 방법에 대해서 알아보겠습니다. 간단합니다. 자신의 PID를 호출하는 getpid() 시스템 콜과 getppid() 시스템 콜을 사용하시면 됩니다. #include #include pid_t getpid(void);pid_t getppid(void); 입력 인자 void 잘라낼 파일의 디스크립터 반환값 pid_t 실패의 경우는 없습니다. 해당 프로세스의 PID값을 반환 굉장히 단순합니다. 그럼 예제를 보시죠! 아래와 같습니다. 자신과 자신의 부모 프로세스의 PID값을 출력해주는 예제입니다. 아래는 해당 프로그램의 출력화면..

    [프로세스 관리] 0. 프로그램 / 프로세스 / 스레드

    먼저 프로세스 관리에 대한 시스템 프로그래밍에 대해 알아보기 전에 프로세스에 대해 간단하게 알아 봅시다. 실제로 프로세스와 스레드 등은 리눅스 커널 분석에서 한번 알아보도록 자세히 알아보구요, 여기선 간단히 ^^ 프로세스는 기본적으로 현재 실행중인 프로그램! 살아있는 프로그램! 을 말합니다. 그 말인 즉슨, 여러분들이 프로그램을 사용하고 싶을 때 더블 클릭이던, 엔터로 실행을 하던그 프로그램이 동작하기 위해 창이 열리고 Memory, Hardware(음악 프로그램이라면 스피커가 되겠죠?)등의 컴퓨터 자원(Resource)를 할당 받아 실행되고 있는 프로그램입니다. 기본적인 프로그램 들은 바이너리 형태로 디스크 같은 저장장치에 기록되어 있습니다. 언제든지 실행하면 컴파일되어 기록되어 있는 코드들이 수행되고..

    [파일입출력] 6. 파일 안의 데이터 잘라내기

    [파일입출력] 6. 파일 안의 데이터 잘라내기

    파일입출력을 사용함녀 파일을 열고 읽고 쓰며, 오프셋을 변화시키며 작업을 하게 됩니다.이때 원하는 파일을 잘라내고 싶을 때가 있습니다. 그 때 사용하는 시스템 콜을 알아보겠습니다. 리눅스에서 특정한 파일을 잘라내기 위한 시스템 콜이 있습니다. 총 2가지인데요,그 주인공은 truncate() 시스템 콜과 ftruncate() 시스템 콜입니다. 두 시스템의 공통점은 특정 파일의 데이터를 잘라 낸다는데 있습니다. 그럼 차이점이 뭘까요?truncate()시스템 콜은 파일의 경로를 이용해서, ftuncate() 시스템 콜은 파일 디스크립터를이용해서 파일의 데이터를 잘라 낸다는 것입니다. 두 함수를 한번 알아보겠습니다.먼저, ftruncate() 시스템 콜입니다. #include #include int ftrunc..