리눅스 프로세스
IT 위키
더 많은 작업
- Linux Process
실행 중인 프로그램을 말한다. 각 프로세스는 고유한 번호인 PID를 가지며, 자신을 만든 부모 프로세스의 번호(PPID)를 함께 가진다. 모든 프로세스의 조상은 PID 1인 systemd(예전에는 init)이다.
하나의 프로세스가 다른 프로세스를 실행하기 위한 시스템 호출방법에는 fork와 exec가 있다.
fork
- 새로운 프로세스를 위해 메모리를 할당받아 복사본 형태의 프로세스를 실행하는 형태로 기존의 프로세스는 그대로 실행되어 있다.
- 새롭게 생성된 프로세스는 원래의 프로세스랑 똑같은 코드를 기반으로 실행된다.
exec
- 원래의 프로세스를 새로운 프로세스로 대체하는 형태로 호출한 프로세스의 메모리에 새로운 프로세스의 코드를 덮어씌워 버린다.
- 포그라운드(foreground) : 터미널을 차지하고 실행된다. 끝날 때까지 다음 명령을 입력할 수 없다.
- 백그라운드(background) : 명령 끝에 &를 붙여 실행한다. 터미널을 바로 돌려받는다.
| 동작 | 방법 |
|---|---|
| 백그라운드로 실행 | 명령 & |
| 포그라운드 작업 정지 | Ctrl+Z (SIGTSTP) |
| 포그라운드 작업 종료 | Ctrl+C (SIGINT) |
| 작업 목록 확인 | jobs (-l 옵션은 PID도 표시) |
| 백그라운드 작업을 포그라운드로 | fg %작업번호 |
| 정지된 작업을 백그라운드에서 계속 실행 | bg %작업번호 |
| 로그아웃 뒤에도 계속 실행 | nohup 명령 &, 출력은 nohup.out에 저장 |
| 현재 셸에서 떼어 내기 | disown %작업번호 |
$ sleep 300 & [1] 2451 $ vi memo.txt # 편집 중 Ctrl+Z [2]+ Stopped vi memo.txt $ jobs [1]- Running sleep 300 & [2]+ Stopped vi memo.txt $ fg %2
- 작업 번호 표기 : %n(n번 작업), %+ 또는 %%(현재 작업), %-(이전 작업), %문자열(그 문자열로 시작하는 작업)