Linux 환경에서의 프로그램 실행
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 명령어 실행하면 계속 사용 가능