프로세스 관리 with putty

감귤맛젤리·2023년 6월 12일
0

커맨드

: ps, kill top, nohup, nice

명령어 자체가 실행프로그램으로 존재하므로 끝나면 저장이 되지 않는다.

ps ; ps [option]

현재 동작중인 프로세스들을 출력한다.

ps : 현재 창(터미널)에서 실행한 프로세스만 출력한다.
ps -x : 자신이 사용하는 모든 프로세스를 출력한다. new session을 선택하면 창을 여러개 사용하는 것이 가능하다.
ps -aux : 시스템에서 동작하는 모든 프로세스들을 출력한다.

pid는 프로세스 id이다. 프로세스를 구분할 수 있다. 
로그인 shell은 bash이다. bash가 명령어를 기다리고 있는 것. 
ps도 명령어 동작중에는 돌아가고 있다. bash의 pid는 변하지 않는다. 프로세스를 구별해 주는 것! 
그러나 ps를 재실행하게되면, bash shell이 자식 프로세스 형태로 실행시켜주고 종료한다.
즉, 재실행할때마다 pid는 바뀐다. 

new session을 통해 새로운 창을 오픈한 것이다. 
ps -x를 해줘서 자신이 사용하는 모든 프로세스를 출력할 수 있다. 
새 창의 pid는 23330인 걸 알 수 있는데, 아래 자세히 보면 23231을 발견할 수 있다. 
하지만, ps는 내부 명령어가 아니기 때문에 끝나면 저장이 되지 않는다. 그래서 23245는 없다. 
sshd는 로그인을 위한 프로그램이다. 
				

kill ; kill [option] pid

특정 프로세스에게 signal을 보낼 때 사용한다.

-s signal : 프로세스에게 보낼 signal을 명시
-KILL : 보통의 kill로 죽지 않는 경우
-HUP : 데몬 프로세스를 다시 실행할 때 사용한다.

option을 쓰지 않으면, SIGTERM시그널을 프로세스에게 보내 프로세스를 종료한다.

! 데몬 프로세스

실행한 프로세스 외에도 환경/편의 위해 시스템이 한번 시작되면 shut down되기전까지 background에 돌고있는 것이다.

	이렇게 무한루프를 도는 프로그램을 만들어서 실행파일을 만들고 
    실행시키면 명령어를 칠 수 없이 계속 프로그램이 돌아가는 상태가 된다. 
    

새 터미널을 켜서 위에서 배운 ps -x로 해당 pid를 알아내서 kill pid 해주면 끝! 꽤나 간편하다. 

프로세스가 종료되었다!

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

cpu 사용량이 top인 프로세스들을 출력한다.

-d delay : 화면 갱신 시간을 설정한다.
-p : 화면을 계속 갱신한다. (끝내고 싶을 때)
-c : command list 전체를 보여준다.
-i : idle상태와 zombie프로세스는 무시한다.

htop : 좀 더 예쁘게 보여준다.
q를 누르면 꺼진다.

여기서 PR 과 NI는 우선순위를 보여주는 것과 관련된 값이다. 

nohup ; nohup [실행파일이름]

로그아웃 후에도 계속 프로세스가 수행되도록 한다.

로그아웃 후 즉, 터미널 창을 닫으면 bash가 사망한다. 프로세스가 원래는 실행되지 않지만, 실행할 수 있다!

nohup a.out 해주고 터미널 종료해준다. top으로 확인해주면 돌아가는 것을 확인할 수 있다. 

pid 확인해주고 

터미널 창을 닫아도 돌아간다!

nohup [실행파일이름]&

로그아웃해도 계속 돌아간다 + 근데 background상태로 돌아간다. (터미널을 장악하지 않는다.)

nice ; nice [실행파일이름]

프로세스를 매우 낮은 우선수위로 수행시킨다.

cpu 여유있을때만 실행한다. 우선순위를 낮추는 것이다.
cpu가 충분해서 남아돌때는 cpu 제어권을 얻어 실행을 할 수 있지만, cpu가 모자라면 우선순위가 낮아서 수행이 밀린다.

내부 명령어

shell자체에 built in되어있어서 bash가 자체적으로 처리한다.
: jobs, fg, bg

foreground

현재 터미널에서 수행 (표준입출력 가능)

background

터미널 이면에서 수행

fg 프로세스 -> ctrl+z(stopped) -> bg [job id]

fg 프로세스가 터미널을 장악하고 있으면 bg [job id]통해 bg로 보낼 수 있다.
job id는 jobs 명령어로 확인이 가능하다.

&

커맨드 뒤에 & 붙이면 background로 process를 수행할 수 있다.

[1] 은 job id이고, 25355는 pid이다. 

jobs

현재의 shell 아래에서 수행중인 process를 모두 보여준다.

pid가 아닌 job id를 확인할 수 있다. job id를 통해 foreground, background로 전환할 수 있다. 

fg ; fg [job_id]

job id의 프로세스를 foreground로 전환한다.

job id가 없으면 가장 최근에 stop시킨 process 혹은 background로 수행시킨 process를 foreground로 전환한다.

bg ; bg [job_id]

job id의 프로세스를 background로 실행 재개

job id가 없으면 가장 최근에 stop된 프로세스를 foreground로 전환한다.

프로세스 관리와 관련한 제어키

: ctrl + c(프로세스 강제 종료), ctrl + z(stopped 상태로 만든다. 즉, process를 swap area로 보낸다.)

ctrl + c

foreground 프로세스의 종료 - 완전히 종료된다!

ctrl + z

foreground 프로세스의 stop (suspended, 일시중지 -> swap area로)

fg, bg로 계속 실행이 가능하다.

shell의 command처리

shell 커맨드가 처리되는 과정의 흐름을 짚어보라는 의미

  1. 키보드 또는 파일로부터 입력을 받아들인다.
  2. 입력문을 명령어와 연산자 드의 token으로 분리한다. alias가 있을 경우 이때 변환한다.
  3. 분리된 token들을 단순 또는 복합 명령어로 변환한다.
  4. shell의 확장법에 따라 token을 확장한 후(shell이 shell메타문자를 해석한다는 의미) command이름, filename, argument 등으로 구분한다.
  5. i/o redirection을 수행한 후, argument로부터 i/o redirection 연산자를 제거한다.
  6. command를 수행한다. (PATH에서 경로를 찾을 수 있어야 한다.)
  7. child의 종료를 기다린 후, wake up하여 prompt를 띄운다.
    command줘서 수행시킨 process가 child형태가 된다.

0개의 댓글

관련 채용 정보