프로세스 : 메모리 위에 올린 프로그램
별도의 메모리 영역을 가진다.
각 프로세스가 내부적으로 사용하는 데이터가 섞이지 않는다.
실행한 사용자 외에는 조작 권한이 제한된다.
커널은 pid를 할당하여 관리한다.
프로세스 관리는 커널의 중요기능 중 하나이다.
새로운 자식 프로세스는 기존에 존재하는 부모 프로세스를 기반으로 만들어진다.
셸이 부모 프로세스, ls 명령어가 자식 프로세스이다.

프로세스 목록 표시

CMD : 실행한 명령어를 의미한다.TTY : 터미널bash : 실행 중인 셸ps : 명령어PID는 프로세스마다 고유하고, 실행 중 변경되지 않는다.
ps xf : 실행 중인 모든 프로세스를 출력, 부모자식 관계를 표시한다.
다른 터미널에서 실행 중인 프로세스나 터미널과 무관하게 돌아가는 프로세스인 데몬을 출력하려면 x옵션을 사용한다.

ps ax : 시스템 프로세스들까지 출력한다.
옵션 형식
UNIX : - 를 사용한다.
BSD (주류) : ps xf -를 사용하지 않는다.
x : ps를 실행한 사용자의 프로세스를 출력ux : ps를 실행한 사용자의 프로세스를 상세하게 출력ax : 모든 사용자의 프로세스를 출력aux : u옵션 - 상세하게 출력auxww : aux가 화면에 잘리지 않도록 출력한다.프로세스 : 커널의 입장에서 바라본 처리 단위
잡 : 셸에서 바라본 처리 단위
커맨드 라인에 입력한 한 행 ls -l / | cat -n | less이 잡 하나에 해당한다.
파이프로 연결하여도 잡은 1개이다. 프로세스는 3개이다.
터미널 에뮬 여러 개를 사용하면 잡 번호가 중복될 수 있다.
셸 별로 관리된다.

Ctrl+z : 잡 일시 정지
cp로 파일 복사 도중 ctrl+z를 누르면 복사 처리가 정지되어 기다려도 완료되지 않는다.
이런 경우 잡을 멈추지 않은 채 셸로 돌아가는 것이 좋다.
jobs : 잡 목록 출력
포그라운드 : 사용자의 입력을 받아들일 수 있는 잡의 상태이다.
fg %1 : 1번 잡이 포그라운드로 진행되어 실행 동안 프롬프트가 나오지 않는다.
백그라운드 : 사용자가 조작할 수 없는 잡의 상태이다.
bg %2 : 2번 잡이 백그라운드로 진행되어 실행 동안 다른 명령어를 실행할 수 있다.
일시 정지 상태에서만 bg로 돌릴 수 있다.
처음부터 bg로 실행하려면
sleep 400 & : 앰퍼샌드를 붙이면 백그라운드로 바로 실행되어 바로 프롬프트를 사용할 수 있다.jobs로 확인해보면 bg명령어가 완료되었는지 알 수 있다. 시간이 오래 걸리는 명령어는 bg가 적절하다.
type jobs fg bg : 전부 셸의 내장 명령어이다.

프로세스는 리눅스 커널의 처리 단위이고 잡은 셸의 처리 단위이다.
pid를 확인하여 조작해도 되지만 셸과 결부된 상위인 잡을 사용해도 된다.
포그라운드에서
ctrl+c로 종료백그라운드에서
kill %1 : 1번 잡을 종료한다.jobs 명령어로 종료되었는지 확인할 수 있다.
kill pid : 프로세스 종료
kill -9 pid : 강제 종료
ps : 현재 실행 중인 프로세스를 보여준다.
ps aux : 모든 사용자의 프로세스를 상세하게 출력한다.
ps f : 부모자식 관계를 보여준다.
다른 터미널을 열어
ps xf하고 다른 터미널의 프로세스id를 찾아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은 그런 작업을 수행하지 않는다. term 후 sigkill해야 한다.