프로그램은 일반적으로 사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 수행절차를 표현해 놓은 명령어들의 집합입니다.
컴퓨터에서 실행되고 있는 프로그램을 가르키며, 운영체제로 부터 실행에 필요한 메모리를 할당 받아 프로그램의 코드를 처리합니다.
하나의 프로그램을 실행 하면서, 동시에 다른 프로그램을 실행하는 것을 멀티 프로세스라고 하며, 애플리케이션 단위의 멀티 태스킹입니다.
스레드는 사전적 의미로 한 가닥의 실이라느 뜻입니다. 한 가지 작업을 실행하기 위해 순차적으로 실행한 코드를 실처럼 이어 놓았다고 해서 유래된 이름입니다.
운영체제는 두 가지 이상의 작업을 동시에 처리하기 위해 프로세스마다 CPU 및 메모리 자원을 적절히 할당하고 병렬로 실행합니다.
즉, 하나의 프로세스가 두 가지 이상의 작업을 처리하는 것을 멀티 스레드라고 합니다.

사용자가 프로세스를 실행할 때 화면에서 결과가 출력될 때까지 기다려야 하는 방식입니다.
$ command
$ ping goolge.com
백그라운드로 프로세스를 실행하면 동시에 여러 프로세스를 실행할 수 있습니다.
하지만, 터미널을 종료하면 실행중인 프로세스도 같이 종료됩니다.
$ command &
$ ping google.com &
nohup 명령어를 이용하여 백그라운드로 실행하면 사용자의 터미널 세션이 종료되어도 작업이 종료될 때까지 프로세스를 실행합니다.$ nohup command &$ nohup ping google.com &컴퓨터에서 실행되고 있는 프로세스의 목록을 확인하고, 관리할 수 있어야 한다.
프로세스에 대한 상태 정보를 표시하고 선택적으로 각 프로세스에서 실행 중인 스레드를 표시합니다. 기본적으로 사용자 터미널과 연결된 각 프로세스에 대해 ps는 프로세스 ID(PID), TTY, 사용된 프로세서 시간(TIME) 및 명령 이름(CMD)을 표시합니다.
- PID : 프로세스 번호
- TTY : 프로세스가 실행된 터미널의 종류와 번호
- TIME : 프로세스 실행 시간
- CMD : 실행되고 있는 프로그램의 이름(명령)
UNIX 방식
ps -e : 시스템에서 실행 중인 모든 프로세스의 정보를 출력한다.
ps -f : 프로세스의 자세한 정보를 출력한다.
ps -u uid : uid로 특정한 사용자에 대한 모든 프로세스의 정보를 출력한다.
ps -p pid : pid로 지정한 특정 프로세스의 정보를 출력한다.
ps -ef : 실행 중인 모든 프로세스의 자세한 정보를 출력한다.
- UID : 프로세스를 실행한 사용자 ID
- PPID : 부모 프로세스 번호
- C : CPU 사용량(%)
- STIME : 프로세스의 시작 날짜나 시간
- TTY : 프로세스가 실행된 터미널의 종류와 번호
- STAT : 프로세스 상태
BSD 방식
ps a : 터미널에서 실행한 프로세스의 정보를 출력한다.
ps u : 프로세스 소유자의 이름, CPU 사용량, 메모리 사용량 등 상세 정보를 출력한다.
ps x : 시스템에서 실행 중인 모든 프로세스의 정보를 출력한다.
ps aux : 터미널과 시스템에서 실행한 프로세스의 자세한 정보를 출력한다.
- USER : 사용자 계정 이름
- %CPU : CPU 사용량(%)
- %MEM : 물리적 메모리 사용량(%)
- RSS : 사용하고 있는 물리적 메모리의 크기(kb)
- VSZ : 사용하고 있는 가장 메모리의 크기(kb)
- START : 프로세스 시작 시간
pstree
컴퓨터의 전체 프로세스를 구조화하여 확인하고 싶을 때는 pstree 명령을 사용합니다.
이 명령을 사용하면 프로세스를 트리구조로 도식화하여 확인할 수 있고 부모관계를 한 눈에 파악할 수 있습니다.
- man pstree
jobs
백그라운드에서 수행 중인 프로세스는 jobs 명령으로 확인할 수 있습니다.
그 뿐만 아니라 jobs 명령을 통해 프로세스의 상태도 확인할 수 있습니다.
- Running : 실행 중
- Stopped : 일시 중단(Ctrl + Z 입력)
- Terminated : 강제 종료(kill 명령 종료)
- Done : 정상 종료
- 필요하다면,
fg %작업번호명령을 사용하여 포그라운드로 전환할 수 있습니다.
kill
터미널에서 프로그램이 실행되고 있을 때, Ctrl + C를 통해 프로세스를 종료시켜 본 적이 있을 겁니다. 프로세스에 이러한 이벤트를 전달하기 위해 사용하는 것을 시그널(Signal)이라고 합니다.
1SIG HUP : 재시작(자세한 루틴은 레퍼런스 참조 필수)
2SIG INT : 실행 중지(= Ctrl + C)
9SIG KILL : 강제 종료(최후의 수단)
15SIG TERM : 일반 종료 시그널
18SIG CONT : 정지된 프로세스 실행
19SIG STOP : 일시 정지
20SIG TSTP : 실행 정지 후 재실행 대기(= Ctrl + Z)
레퍼런스 링크 : gnu.org 사이트의 sinals 관련