본문 바로가기
리눅스

[리눅스 API] 프로세스

by 목가 2015. 7. 27.
반응형

프로세스 : 실행중인 프로그램

프로그램 : 실행 시에 프로세스를 어떻게 만들지에 대한 광범위한 정보를 담고 있는 파일

프로그램에 포함된 내용

1. 바이너리 포맷 식별자 : ELF(Executable and Linking Format) 를 채택

2. 기계어 명령

3. 프로그램 진입점 주소

4. 데이터

5. 심볼 테이블과 재배치 테이블

6. 공유 라이브러리와 동적 링크 정보

7. 기타정보


#include <unistd.h> 

pid_t getpid(void) : 언제나 성공적으로 호출자의 프로세스 ID 를 리턴

pid_t getppid(void) : 언제나 성공적으로 호출자의 부모의 프로세스 ID 를 리턴


세그먼트 : 각 프로세스에 할당된 메모리는 흔히 세그먼트라고 부르는 여러 영역으로 나뉜다. 

1. 텍스트 세그먼트 

2. 초기화된 데이터 세그먼트

3. 초기화되지 않은 데이터 세그먼트

4. 스택 : 동적으로 자라고 줄어드는 세그먼트로, 스택 프레임을 담고 있다. 스택 프레임에는 함수의 지역변수, 인자, 리턴 값이 저장된다. 

5. 힙 : 실행 시에 동적으로 메모리를 할당하는 영역. 힙의 꼭대기를 프로그램 브레이크라고 한다. 


가상메모리 관리

프로그램의 두 가지 지역성

1. 공간적 지역성 : 프로그램이 최근에 접근한 메모리 주소 근처에 접근하는 경향이다.(순차적 처리때문)

2. 시간적 지역성 : 프로그램이 최근에 접근한 메모리 주소에 가까운 미래에 다시 접근하는 경향이다.(루프때문)


argc : 명령행 인자 개수

argv[] : 명령행 인자를 가리키는 포인터의 배열


/proc/PID/cmdline : 프로세스의 명령행 인자 확인

환경변수 

- 대부분의 쉘에서 export 명령을 통해 환경 변수에 값 추가 가능

- 프로그램에서 환경변수 접근

#include "tlpi_hdr.h"

1. extern char **environ (전역변수로 접근)

#include <stdlib.h>

2. char *getenv(const char *name) : (값) 문자열을 가리키는 포인터를 리턴하거나, 해당 변수가 없으면 NULL 리턴

3. int putenv(char *string) : 성공하면 0 리턴, 에러가 발생하면 0이 아닌 값을 리턴

- string 인자는 이름=값 형태의 문자열을 가리키는 포인터

4. int setenv(const char *name, const char *value, int overwite) : 성공하면 0을 리턴하고 에러가 발생하면 -1 리턴

- name과 value 가 가리키는 문자열을 그 버퍼에 name=value 형태로 복사

5. int unsetenv(const char *name) : 성공하면 0을 리턴하고 에러가 발생하면 -1 리턴

- 해당하는 변수를 환경 변수 목록에서 제거

6. int clearenv(void) : 성고하면 0을 리턴하고 에러가 발생하면 0이 아닌 값을 리턴

- 환경 변수 목록 전체를 삭제

goto 수행

- 함수간의 비지역 goto가 가능하다. 컴파일러 최적화 관련 문제를 피하려면, 이 함수들을 쓸 때 변수를 volatile 로 선언해야 한다. 

#include <setjmp.h>

1. int setjmp(jmp_buf env);

- 처음 호출하면 0을 리턴하고, longjmp()을 통해 호출하면 0이 아닌 값을 리턴

2. void longjmp(jmp_buf env, int val)

- setjmp 위치로 이동 

반응형

'리눅스' 카테고리의 다른 글

[리눅스 API] 메모리 할당  (0) 2015.08.03
[리눅스] 파일시스템  (0) 2015.07.31
윈도우 이클립스 gcc 컴파일  (0) 2015.07.27
grep 명령어  (0) 2015.07.26
리눅스 명령어 모음  (0) 2015.07.26

댓글