공부/Backend

Linux 환경에서의 Program 실행

유스베리이 2022. 12. 10. 16:40

gcc

gcc [option] FILE 

- c 컴파일러 

-반드시 파일 이름을 .c 로 저장

-컴파일 결과 .out 이 됨

-"-o filename" 실행파일 이름은 filename

 

Library (archive) file 만들기

- library file 은 . a 로 끝남

- ar 사용

ar rcs libname.a a.o b.o c.o  // library file 생성

r // 지정한 아카이브로 모듈 추가. 기존 파일임녀 치환
c // 아카이브(라이브러리파일) 생성
s // 아카이브 index 생성
x // extract
t// print content of archive

 

Static library (정적 Lib)

- 여러 프로그램에서 사용하는 함수를 포함하는 오브젝트 파일을 하나로 다룰 수 있도록 함.

-.a (archive ) 

-binding : compile time ( 소스코드로 작성한 파일을 컴파일을 통해 기계어코드로 변환)

-default linking : /lib/libc.a

Static Library 만들기 

- lib___.a // lib 이름

-linking 

  gcc myc -lx ( libx.a for linking)]

-libc.a is default for gcc 

#gcc -c a.c b.c c.c
#ar rcs libmy.a a.o b.o c.o // 컴파일 된 후 오브젝트 파일이 됨.
#gcc -o mytest my.c libmy.a // my.c 의 파일 이름은 mytest라고 정하고 libmy.a linking 함

 

Shared Library (공유 Lib )

- 여러 오브젝트 파일을 하나의 거대한 오브젝트 파일로 만들어 이를 공유할 수 있도록 함. 

-.so (shared object)

-binding : run time (컴파일 과정이 끝나면 실행이 될 떄 응용 프로그램이 실행되어지는 때)

 

Shared  Library 만들기 

-관리자 (root ) 계정만 가능 

#gcc -fPIC -c a.c b.c c.c
#gcc -shared -o libmy.so a.o b.o c.o // shared Lib 생성 
#gcc -o mytest my.c libmy.so //linking

프로세스 관리 

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

$ps // 현재 창에서 실행한 프로세스 만 출력

$ps -x // 자신이 사용하는 모든 프로세스

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

-->ps 는 매순간 새로실행. 이전은 종료

 

kill: 프로세스에게 signal을 보낼 때 사용 (죽이는 COMMAND)

$kill [option] pid 
$kill -s signall pid // 프로세스에게 보낼 signal 명시
$kill -KILL pid // 보통의 kill로 죽지 않을때
$kill -HUP pid // 데몬 프로세스를 다시 실행할 때 

$vi a
$kill 25132 // a의 pid 
 --> vi a 강제 종료됨

top: CPU 사용량이 top인 프로세스 출력

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

 -d delay : 화면 갱신 시간 설정
 -c : command list 전체 보여줌
 -i : idle 상태와 zombie 프로세스는 무시

top 실행 중 명령

SPACE 화면 갱신
k kill 명령
q top 종료
P %CPU값으로 정렬(default)
T Time 값으로 정렬
W 바꾼 설정을 저장

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

$nohup 실행파일이름 &

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

$nice 실행파일이름

Shell 내부 명령어 및 제어키

-foreground : 현재 터미널에서 수행

-background : 터미널 이면에서 수행

 

& :command 뒤에 붙이면 background로 실행

 

jobs : 현재 shell 아래에서 수행중인 프로세스 보여줌

fg [job_id] : job_id 의 프로세스를 foreground로 전환( 만약 id 입력 안하면 가장 최근 stop시킨 프로세스)

bg[job_id] :         ``                       background로 전환 ( ``) 

ctr-c :foreground 프로세스 종료

ctr-z :foreground 프로세스의 stop (fg or bg로 계속 실행 가능)

 

 

$jobs

[1]실행중   ./a.out &
[2]실행중   ./a.out &
[3]정지됨   ./a.out


$fg 3
./a.out
^Z
[3]정지됨 ./a.out

$bg 3
[3]      .a.out &