본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Linux Process

실행 중인 프로그램을 말한다. 각 프로세스는 고유한 번호인 PID를 가지며, 자신을 만든 부모 프로세스의 번호(PPID)를 함께 가진다. 모든 프로세스의 조상은 PID 1인 systemd(예전에는 init)이다.

프로세스 목록 보기

편집 원본 편집

프로세스 호출

편집 원본 편집

하나의 프로세스가 다른 프로세스를 실행하기 위한 시스템 호출방법에는 fork와 exec가 있다.

fork

  • 새로운 프로세스를 위해 메모리를 할당받아 복사본 형태의 프로세스를 실행하는 형태로 기존의 프로세스는 그대로 실행되어 있다.
  • 새롭게 생성된 프로세스는 원래의 프로세스랑 똑같은 코드를 기반으로 실행된다.

exec

  • 원래의 프로세스를 새로운 프로세스로 대체하는 형태로 호출한 프로세스의 메모리에 새로운 프로세스의 코드를 덮어씌워 버린다.

프로세스 상태

편집 원본 편집

ps의 STAT 열에 표시된다.

기호 상태
R 실행 중이거나 실행 대기
S 인터럽트 가능한 대기 (sleep)
D 인터럽트 불가능한 대기 (주로 입출력 대기)
T 정지 (Ctrl+Z, SIGSTOP)
Z 좀비. 종료했지만 부모가 종료 상태를 거둬 가지 않은 프로세스. 좀비 프로세스 참조
  • 추가 표시 : < 높은 우선순위, N 낮은 우선순위, s 세션 리더, + 포그라운드 프로세스 그룹, l 멀티스레드

포어그라운드와 백그라운드

편집 원본 편집
  • 포그라운드(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번 작업), %+ 또는 %%(현재 작업), %-(이전 작업), %문자열(그 문자열로 시작하는 작업)
  • NI(nice) 값은 -20(가장 높음)부터 19(가장 낮음)까지이며 기본값은 0이다.
  • 일반 사용자는 nice 값을 올릴(우선순위를 낮출) 수만 있고, 낮추는 것은 root만 할 수 있다.
  • nice -n 10 명령 : 우선순위를 정해 새로 실행
  • renice -n 5 -p PID : 실행 중인 프로세스의 우선순위 변경

프로세스 종료

편집 원본 편집
  • kill : PID로 시그널을 보낸다. 기본은 15(SIGTERM)이고 강제 종료는 9(SIGKILL)이다.
  • killall : 프로세스 이름으로 시그널을 보낸다.
  • pkill : 이름, 사용자, 터미널 등 조건으로 시그널을 보낸다.
  • 시그널 종류는 리눅스 시그널 문서를 본다.

데몬과 예약 작업

편집 원본 편집
  • 리눅스 데몬 : 백그라운드에서 계속 실행되며 요청을 기다리는 프로세스. systemd가 관리한다. (systemctl)
  • cron : 정해진 시각에 반복 실행
  • at : 정해진 시각에 한 번 실행