[모두의 리눅스] 10장 프로세스와 잡

aramjs·2023년 10월 23일

Linux

목록 보기
7/14
post-thumbnail

10.1 프로세스란

  • 프로세스 : 메모리 위에 올린 프로그램

    • 별도의 메모리 영역을 가진다.

    • 각 프로세스가 내부적으로 사용하는 데이터가 섞이지 않는다.

    • 실행한 사용자 외에는 조작 권한이 제한된다.

    • 커널은 pid를 할당하여 관리한다.

    • 프로세스 관리는 커널의 중요기능 중 하나이다.

    • 새로운 자식 프로세스는 기존에 존재하는 부모 프로세스를 기반으로 만들어진다.

    • 셸이 부모 프로세스, ls 명령어가 자식 프로세스이다.

ps 명령어

  • 프로세스 목록 표시

    • CMD : 실행한 명령어를 의미한다.
    • TTY : 터미널
    • bash : 실행 중인 셸
    • ps : 명령어

PID는 프로세스마다 고유하고, 실행 중 변경되지 않는다.

  • ps xf : 실행 중인 모든 프로세스를 출력, 부모자식 관계를 표시한다.
    다른 터미널에서 실행 중인 프로세스나 터미널과 무관하게 돌아가는 프로세스인 데몬을 출력하려면 x옵션을 사용한다.

    • sshd 아래에 bash가 있고, 그 아래 man bash가 있다.
    • 한 사용자가 pts/1, pts/0 두 터미널에 로그인한 것이다.
    • sshd의 TTY는 ?이다. 해당 프로세스가 터미널에 접속하지 않은 데몬임을 의미한다.
  • ps ax : 시스템 프로세스들까지 출력한다.

    • 리눅스는 멀티 태스킹을 지원하여 다양한 프로세스가 동시에 돌아간다.
  • 옵션 형식

    • UNIX : - 를 사용한다.

    • BSD (주류) : ps xf -를 사용하지 않는다.

      • x : ps를 실행한 사용자의 프로세스를 출력
      • ux : ps를 실행한 사용자의 프로세스를 상세하게 출력
      • ax : 모든 사용자의 프로세스를 출력
      • aux : u옵션 - 상세하게 출력
      • auxww : aux가 화면에 잘리지 않도록 출력한다.

10.2 잡

  • 프로세스 : 커널의 입장에서 바라본 처리 단위

  • : 에서 바라본 처리 단위

    • 커맨드 라인에 입력한 한 행 ls -l / | cat -n | less이 잡 하나에 해당한다.

    • 파이프로 연결하여도 잡은 1개이다. 프로세스는 3개이다.

    • 터미널 에뮬 여러 개를 사용하면 잡 번호가 중복될 수 있다.

    • 셸 별로 관리된다.

  • Ctrl+z : 잡 일시 정지

    • cp로 파일 복사 도중 ctrl+z를 누르면 복사 처리가 정지되어 기다려도 완료되지 않는다.

    • 이런 경우 잡을 멈추지 않은 채 셸로 돌아가는 것이 좋다.

  • jobs : 잡 목록 출력

fg 명령어

  • 포그라운드 : 사용자의 입력을 받아들일 수 있는 잡의 상태이다.

    • 일시 정지에 있는 잡을 다시 확인하려면 fg로 돌려야 한다.
  • fg %1 : 1번 잡이 포그라운드로 진행되어 실행 동안 프롬프트가 나오지 않는다.

bg 명령어

  • 백그라운드 : 사용자가 조작할 수 없는 잡의 상태이다.

  • bg %2 : 2번 잡이 백그라운드로 진행되어 실행 동안 다른 명령어를 실행할 수 있다.

일시 정지 상태에서만 bg로 돌릴 수 있다.
처음부터 bg로 실행하려면

  • sleep 400 & : 앰퍼샌드를 붙이면 백그라운드로 바로 실행되어 바로 프롬프트를 사용할 수 있다.

jobs로 확인해보면 bg명령어가 완료되었는지 알 수 있다. 시간이 오래 걸리는 명령어는 bg가 적절하다.

  • type jobs fg bg : 전부 셸의 내장 명령어이다.

  • 프로세스는 리눅스 커널의 처리 단위이고 잡은 셸의 처리 단위이다.

  • pid를 확인하여 조작해도 되지만 셸과 결부된 상위인 잡을 사용해도 된다.


10.3 잡과 프로세스의 종료

잡 종료

  • 포그라운드에서

    • ctrl+c로 종료
  • 백그라운드에서

    • kill %1 : 1번 잡을 종료한다.

jobs 명령어로 종료되었는지 확인할 수 있다.

프로세스 종료

  • kill pid : 프로세스 종료

  • kill -9 pid : 강제 종료

  • ps : 현재 실행 중인 프로세스를 보여준다.

  • ps aux : 모든 사용자의 프로세스를 상세하게 출력한다.

  • ps f : 부모자식 관계를 보여준다.

다른 터미널을 열어 ps xf 하고 다른 터미널의 프로세스id를 찾아 kill 할 수 있다.

슈퍼 사용자는 모든 사용자의 프로세스를 종료할 수 있다.

kill 명령어 : 시그널 전송

  • kill 명령어는 시그널을 전송하는 명령어이다.
  • 시그널 : 프로세스에게 전송되는 신호
    • 프로세스는 전달받은 시그널에 따라 처리한다.
  • kill -TERM 4695 : 4695 프로세스에게 term 이라는 시그널을 전송한다. 그냥 kill과 똑같다. 기본값이다. 두 명령어는 동일하다.

  • TERM : terminate 종료 시그널

  • kill -15 4695 도 동일하다.

ctrl+z (TSTP)나 ctrl+c (INT)도 내부적으로 프로세스에게 시그널을 전송하는 것이다.

  • kill -l : 시그널의 종류를 모두 볼 수 있다.
  • 9번 시그널 SIGKILL은 예외적이다. 프로세스에 전달되지 않고 리눅스 커널이 처리한다. --> 강제 종료

    리눅스 커널이 프로세스를 강제 종료한다. 마지막 수단이다.
    term을 받으면 상태를 보존하는 등 종료 전 작업을 수행하는데,
    sigkill은 그런 작업을 수행하지 않는다. termsigkill해야 한다.

profile
안녕하세요.

0개의 댓글