안 씀/시스템 소프트웨어

Linux 환경에서의 프로그램 실행

unhyepnhj 2024. 12. 6. 20:29

gcc: C 컴파일러

$ gcc [options] FILE ...
$ gcc file.c	//a.out 파일 생성
$ gcc -o file file.c	//file 파일 생성

- FILE은 무조건 C 파일(.c)

- FILE을 컴파일한 실행 파일(.out) 생성

- 파일명 옵션을 지정하지 않으면 컴파일 결과 a.out의 디폴트 파일명으로 생성

* C++ 컴파일러는 g++


library 만들기 및 사용

$ ar [options] library.a file1.o file2.o file3.o

- static library 파일은 (.a)

<options>

r: include this(replace is exist)

c: silently(if not exist)

s: maintain table(symbol: file)

x: extract

t: print content of archive

 

Static library vs. Shared library

https://sysouthelloworld.tistory.com/199y

 

System Software and Program Execution(2)

Library - Standard library header files          /usr/include   /usr/include/sys- 헤더 파일에는 라이브러리 함수의 선언만 있고, 실제 함수의 정의는 라이브러리 파일에 있는 것이 일반적Compile & Linking프로그

sysouthelloworld.tistory.com

static library(.a):

함수들이 gcc time에 실행 파일로 복사되며, compile time에 binding된다. 

 

shared library(.so):

함수들이 gcc 타임에 map되어(copy 아님) run time 중 필요에 따라 load되며, run time에 binding된다.


Static library 만들기 및 사용

$ gcc -c a.c b.c c.c	//.o 파일 생성
$ ar rcs libmy.a a.o b.o c.o
$ gcc -o myTest my.c libmy.a	//my.c와 libmy.a로 myTest 파일 생성

- libhello.a, libc., libm.a 등의 naming convention

- 대체로 /lib, /usr/lib 등의 위치에 존재

 

Shared library 만들기

$ gcc -fPIC -c a.c b.c c.c
$ gcc -shared -o libmy.so a.o b.o c.o
$ gcc -o mytest my.c libmy.so

- gcc에 option을 주어 만들 수 있음


프로세스 관리

프로세스 관리 command: ps, kill, top, nohup, nice, etc.
프로세스 관리와 관련한 내부 명령어: jobs, fg, bg
프로세스 관리 제어키 - Control-c, Control-Z

 

ps: 현재 동작 중인 프로세스들을 출력

$ ps [option]

<option>

$ ps: 현재 창에서 실행한 프로세스만

$ ps -x: 자신이 사용하는 모든 프로세스(다른 창을 띄웠다면 그것까지) 출력

$ ps  -aux: 시스템에서 동작하는 모든 프로세스 출력

 

kill: 프로세스에게 종료 signal 전송

$ kill [option[ pid		//pid=process ID

- option을 쓰지 않으면 SIGTERM 시그널을 보내 프로세스 종료

<option>

-s signal: 프로세스에게 보낼 signal 명시

-KILL: 보통의 kill로 죽지 않을 경우

-HUP: daemon 프로세스를 다시 실행할 때

 

top: CPU 사용량이 최대인 프로세스들을 출력

$ top [-] [d delay] [q] [c] [i]

-d delay: 화면 갱신 시간 설정

-c: command list 정체를 출력

-i: idle 상태와 zombie 프로세스 무시

 

nohup: 로그아웃 후에도 프로세스가 계속 수행되도록 함

$ nohup FILE &

- no hang up의 줄임말

 

nice: 프로세스를 매우 낮은 우선순위로 수행

$ nice FILE

Shell 내부 명령어 및 제어 키

 

foreground vs. background

 

foreground process: 현재 터미널에서 수행되는 프로세스

    - 표준 입출력 가능

    - ^C로 정지시킬 수 있으며, 정지 전까지 다른 명령어 수행 불가

 

background process: 터미널 이면에서 수행되는 프로세스

    - 수행 중 다른 명령어 수행 가능

 

& : command 뒤에 '&'를 붙이면 해당 프로세스를 background 프로세스로 변경

 

jobs

- current shell 아래에서 수행 중인 프로세스를 모두 보여 줌

 

fg [job_id]: job_id의 프로세스를 foreground로 전환

- job_id 입력하지 않으면 가장 최근에 stop시킨 프로세스(혹은 background로 수행시킨 process)를 foreground로 전환

 

bg [job_id]: job_id의 프로세스를 background로 실행 재개

- job_id 입력하지 않으면 가장 최근에 stop된 프로세스를 background로 실행 재개

 

Control-c/Control-z

- ^C: foreground process의 실행 "종료"

- ^Z: foreground process의 stop(=suspended 상태, 일시 중지) -> fg 및 bg 명령어 실행하면 계속 사용 가능