반응형
Process
프로세스란 하드디스크에 저장된 프로그램이 현재 실행된 상태로 메모리에 상주해 있는 프로그램을 말합니다. 각각의 process는 랜덤한 고유 PID(Process ID)를 부여 받게 됩니다. 이러한 프로세스는 사용자와 상호작용 여부로 2종류로 구분합니다.
Foreground Process (이하 fg)
- 실행하면 화면에 나타나 사용자와 상호 작용하는 프로세스
- 현재 실행중인 fg 작업을 취소하고 싶을 때: 'ctrl+c'
- 현재 실행중인 fg 작업을 bg 작업으로 변경하고 싶을 때: 'ctrl+z'를 눌러 잠시 실행을 멈춘 다음 '#bg'명령으로 해당 작업을 bg로 보낼 수 있습니다.
Background Process (이하 bg)
- 실행은 되었지만 화면에 나타나지 않고 뒤에서 실행되고 있는 프로세스
- 보통 사용하는 명령의 뒤에 &를 붙여 bg작업으로 보낸다.
- 현재 실행중인 bg 작업을 다시 fg로 불러내기 위해서: '#fg <작업번호>'
- 작업번호: 프로세스에게 부여되는 임시 번호로 jobs명령으로 확인 가능
Demon Process
- 데몬(daemon) 이란 서비스의 요청에 대해 응답하기 위해 실행중인 백그라운드(background) 프로세스의 일종이며, 사용자가 직접적으로 제어하지 않는 것이 특징입니다.
- 사용자의 요청을 기다리고 있다가 요청이 발생하며 이에 적절히 대응하는 리스너와 같은 역할을 합니다.
- 즉, 메모리에 상주하면서 특정 요청이 오면 즉시 대응할 수 있도록 대기중인 프로세스를 말합니다.
- 유닉스(리눅스 포함) 운영체제에서 이름이 "d"로 끝나는 프로세스들이 대표적인데 inetd, httpd, nfsd, sshd, named와 lpd 등이 있습니다.
- standalone 타입 데몬: 시스템에 독자적으로 프로세스가 구동되어 서비스를 제공합니다.
- 이 타입의 실행 스크립트 파일은 /etc/init.d/ 디렉토리에 들어있습니다.
Background Process VS Demon Process
Background Process 특징
- 백그라운드 프로세스는 이와 다르게 터미널을 통해 상호작용이 가능합니다.
- 별도의 Parent process를 가질 수 있으며 Parent process와 세션이 공유되기 때문에 Parent process가 받는 Signal 의 영향을 받습니다(부모 프로세스가 종료되면 같이 종료).
Demon Process 특징
- 일반적인 데몬은 터미널을 갖지 않습니다(유저와 상호작용하지 않음).
- 정확히는 데몬은 그 자체로 Process Group Leader로 부모가 1번 pid를 갖는 init으로 세팅됩니다.
- 즉, 독자적인 Session 을 갖고있으며 Linux System 자체가 아닌 별도의 독립된 Parent process를 갖지 않습니다.
- 리눅스의 cron, smartd 와 같은 스케줄링 & 모니터링 프로세스들은 바로 이 Daemon Process 의 형태를 갖습니다.
Daemon Process의 조건 3가지
- Fork로 자식 프로세스 생성 후 부모 프로세스를 종료합니다.
- 자식 프로세스의 ppid(소유 프로세스)를 pid 가 1인 init으로 양도합니다.
- Setsid를 이용하여 새로운 세션을 만들고 생성된 자식의 pid가 세션의 제어권을 가지도록 합니다.
- 세션이란 프로그램 그룹의 모음인데 세션 생성시 ttv를 부여하지 않게 되면 터미널을 갖지 않는 세션이 생겨나며 세션의 리더가 된다.
- 프로세스의 위치를 루트로 옮겨주면 경로 작업 수행에 유리합니다(선택).
Process 관련 명령어
OS에는 상당히 많은 process가 실행되고 있습니다. process 관련 명령을 실행시킬시 원하는 내용 외의 부가적인 내용이 많은 것을 확인할 수 있습니다. 이는 옵션과 grep 명령을 잘 활용한다면 해결하실 수 있습니다.
Process 관련 명령어
- ps : 현재 터미널에서 실행중인 process를 간단하게 나열.
- ps auwx : 프로세스의 사용자, cpu 점유율, RAM할당량, PID, 상태, 실행날짜 시간 등을 자세히 나열합니다.
- jobs : 현재 수행중인 백그라운드 작업 표시
- kill <Process ID> : 해당 PID의 프로세스 종료
- kill -9 <Process ID> : 해당 PID의 프로세스 강제 종료
- pstree : 부모/자식 프로세스간 종속관계 확인
- top : 실시간 cpu, memory 사용률을 표시(10sec interval)
- htop : 실시간 cpu, memory 사용률을 예쁘게(human-readable) 표시(10sec interval)
+ grep 명령어 활용
$ <명령> | grep <목적>
// process 확인하는 명령 중 PID가 97307에 해당하는 목록 확인
$ ps
PID TTY TIME CMD
97305 ttys000 0:00.12 -zsh
55031 ttys001 0:00.09 -zsh
$ ps | grep 97307
37815 ttys000 0:00.00 grep 97307
grep 한 결과 값 txt 파일로 저장하기
grep -n 'Apple' mylog.txt > result.txt
참고
- [Linux] Process & Daemon: https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=et3569&logNo=130103478665
- [Linux] 리눅스 grep 명령어 사용법 (파일 내 특정 문자열 찾기): https://coding-factory.tistory.com/802
- [Linux] 프로세스 & 데몬 & 서비스 차이 정리: https://inpa.tistory.com/entry/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%8D%B0%EB%AA%AC-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%A0%95%EB%A6%AC#thankYou
반응형
'Study: ComputerScience(CS) > CS: Linux' 카테고리의 다른 글
[Linux] ln 명령어(feat. 리눅스 파일 링킹): 하드링크(Hard Link) VS 심볼릭링크(Symbolic Link) (0) | 2022.08.09 |
---|---|
[Linux] Graceful Shutdown이란? (feat. SIGINT/SIGTERM/SIGKILL + signal handler) (0) | 2022.08.05 |
[Linux] 리눅스 로컬네임서버(/etc/hosts) 설정: DNS 서버 만들기 (0) | 2022.07.28 |
[Linux] 리눅스 파일 시스템(File System) (0) | 2022.07.25 |
[Linux] 리눅스 디렉토리(폴더) 구조: /home, /bin, /etc, /usr... (0) | 2022.07.25 |