본문 바로가기
오픈소스SW

리눅스 명령어 기초 3 - 작업/프로세스 관련 명령

by sepang 2021. 9. 2.

리눅스 커널의 구조

위 사진은 리눅스 커널의 구조이다. 이전까지 우리는 주로 파일 시스템에 관련한 명령어들을 살펴봤다. 이번에는 프로세스 관리(Process management)에 대한 명령어를 살펴보자.

echo

sepang@ubuntu:~$ echo hello
hello

 인수로 입력한 문자열을 그대로 출력한다. 이거 왜 쓰는거지??라는 생각이 절로 든다. 셸 스크립트 상에서 자주 쓰인다고 하는데 c언어의 printf()와 비슷한 용도라고 생각하자.

sleep (시간)

sepang@ubuntu:~$ sleep 3; echo 3sec
3sec

(시간)에는 그냥 숫자(초)가 들어갈수도 있고 숫자뒤에 s(초), m(분), h(시간) 등이 붙여질수도 있다. 해당 시간 동안 프로그램을 일시정지한다. 명령문을 적을 때 ';'로 명령을 구분하여 한번에 여러 명령을 할 수 있는데 위와 같은 명령문을 입력하면 3초 뒤에 '3sec'라는 문자를 출력한다.

※ 작업 상태

 어떤 작업이 수행될 때 이 작업은 3가지 상태를 가질 수 있다. '포그라운드 실행', '백그라운드 실행', '정시 상태'이다. 여태 우리가 했던 명령어 예를 들어 'ls'같은 명령어를 입력하면 이를 처리하여 결과를 출력한다. 이는 해당 작업이 포그라운드에서 수행된 것이다. 만약 'sleep'을 이용해 현재 프로그램을 30분동안 일시정지 시킨다면 그 동안은 어떤 명령도 수행할 수가 없다. 현재 수행중인 작업을 종료하려면 'ctrl+c'를 누르면 된다.

sepang@ubuntu:~$ (sleep 10; echo 10sec) &
[1] 8268
sepang@ubuntu:~$ pwd
/home/sepang
sepang@ubuntu:~$ 10sec

[1]+  Done                    ( sleep 10; echo 10sec )

  명령어 뒤에 '&'를 붙여주면 이는 해당 작업은 백그라운드에서 수행된다. 때문에 백그라운드에서 작업이 수행되는 동안 포그라운드에서 다른 작업이 가능하다.

sepang@ubuntu:~$ (sleep 500; echo "1st job")
^Z
[1]+  Stopped                 ( sleep 500; echo "1st job" )
sepang@ubuntu:~$ (sleep 500; echo "2nd job")
^Z
[2]+  Stopped                 ( sleep 500; echo "2nd job" )
sepang@ubuntu:~$ jobs
[1]-  Stopped                 ( sleep 500; echo "1st job" )
[2]+  Stopped                 ( sleep 500; echo "2nd job" )
sepang@ubuntu:~$ fg
( sleep 500; echo "2nd job" )
^Z
[2]+  Stopped                 ( sleep 500; echo "2nd job" )
sepang@ubuntu:~$ jobs
[1]-  Stopped                 ( sleep 500; echo "1st job" )
[2]+  Stopped                 ( sleep 500; echo "2nd job" )
sepang@ubuntu:~$ bg
[2]+ ( sleep 500; echo "2nd job" ) &
sepang@ubuntu:~$ bg
[1]+ ( sleep 500; echo "1st job" ) &
sepang@ubuntu:~$ jobs
[1]-  Running                 ( sleep 500; echo "1st job" ) &
[2]+  Running                 ( sleep 500; echo "2nd job" ) &
sepang@ubuntu:~$ fg
( sleep 500; echo "2nd job" )
^Z
[2]+  Stopped                 ( sleep 500; echo "2nd job" )
sepang@ubuntu:~$ jobs
[1]-  Running                 ( sleep 500; echo "1st job" ) &
[2]+  Stopped                 ( sleep 500; echo "2nd job" )

 앞에서 ctrl+c를 누르면 현재 수행 중인 작업이 종료된다고 했는데, 작업이 수행 중일 때 ctrl+z를 누르면 작업이 정지된다. 'jobs', 'ps'명령어를 입력하면 현재 작업들의 상태를 보여준다. 최근 작업의 상태를 포그라운드 실행으로 바꾸려면 'fg'명령어를 입력하면 되고, 백그라운드 실행으로 바꾸려면 'bg'명령어를 입력하면된다. 만약 특정작업을 선택하여 'fg'나 'bg'를 사용하려면 'bg %2'처럼 '%(작업번호)'를 추가로 넣어주면 된다.

kill (PID)

sepang@ubuntu:~$ (sleep 500; echo "1st job")&
[1] 8413
sepang@ubuntu:~$ ps
    PID TTY          TIME CMD
   2780 pts/0    00:00:00 bash
   8413 pts/0    00:00:00 bash
   8414 pts/0    00:00:00 sleep
   8415 pts/0    00:00:00 ps
sepang@ubuntu:~$ kill 8414
Terminated
1st job
[1]+  Done                    ( sleep 500; echo "1st job" )

 'ps'명령어를 이용하면 현재 작업들의 PID를 확인할 수 있다. 현재 작업 번호라고 생각하면 되는데 'kill (PID)'를 입력하면 해당 PID를 가지는 작업을 종료 시킬 수 있다.

 

참고자료

SST youtube channel / https://www.youtube.com/channel/UCora73FsjH9ZuIjCvJ0J0iA

댓글