정보보안공부
Linux_리눅스 프로세스 본문
리눅스 프로세스
- 오라클 가상 머신 사용
- CentOS6
<프로세스>
#1 프로세스
- 프로세스는 실행중인 프로그램이다.
- 프로그램은 하드디스크에 파일형태로 저장되어있다.
- 프로그램은 실행시에 프로세스를 어떻게 만들지에 대한 광범위한 정보를 담고있다.
- /proc 디렉토리 : 실제 메모리에서 동작중인 상태를 보여주는 가상 파일시스템 디렉토리이다.
- 포르세스의 상태로는 준비, 실행, 대기, 종료 상태를 가지고있는다.
#2 프로세스 실행방식
*** 포그라운드 프로세스
-> 사용자와 직접적으로 대화하는 프로세스, bash에서 실행하는 프로그램은 대부분 포그라운드 프로세스로 실행된다.
*** 백그라운드 프로세스
-> 사용자와 직접적으로 대화하지 않고 사용자 뒤에서 실행되는 프로세스이다.
-> 데몬, 시스템운영에 필요한 프로세스들이 백그라운드 프로세스로 이미 동작한다.
-> 쉘에서 명령어를 실행할 때 반드시 & 기호를 명령어뒤에 써서 실행해야 백그라운드로 실행된다.
*** 프로세스 전환
포그라운드 -> 백그라운드 : Ctrl + Z + bg %작업번호
백그라운드 -> 포그라운드 : fg 작업번호
-> fg %작업번호로도 사용가능하다.
#3 데몬 프로세스
- 데몬 프로세스는 백그라운드로 동작하면서 외부의 요청에 응답하는 프로세스이거나 특정 서비스를 실행시켜주는 프로세스이다.
- 데몬 프로세스는 터미널에 분리가 되는 특징이 있다. ( 터미널에 분리된 프로세스는 ps aux 로 확인시 TTY 부분에 ?로 표시가 된다. )
- 서비스 데몬 프로그램들의 경로 : 서비스 데몬 프로그램들은 주로 컴파일된 바이너리이므로 관리자가 실행하는 디렉토리인 주로 /usr/sbin 디렉토리에 위치한다.
- 데몬을 실행시켜주는 스크립트는 대부분 서비스명으로 되어있다.
/usr/sbin/crond /usr/sbin/httpd ...
- 데몬을 실행시키는 스크립트 디렉토리
/etc/rc.d/init.d or /etc/init.d
- 데몬을 실행시키는 스크립트 예
/etc/init.d/데몬스크립트명
/etc/rc.d/init.d/crond or /etc/init.d/crond
#4 jobs : 실행되는 프로세스를 확인 / kill : 프로세스에 특정 signal 전송
*** jobs
*** kill
- kill 명령어 : 프로세스에 특정한 signal을 보내는 명령이다. 보통 실행중인 프로세스에 종료 신호를 보낸다. 보통 중지시킬 수 없는 프로세스를 종료시킬때 많이 사용한다.
- kill -l 을 통해 여러 signal을 볼 수 있다.
- kill 명령어의 signal번호가 없다면 기본값은 15(SIGTERM) 신호가 보내진다.
- 내부적으로 15번 신호를 막게 프로그래밍이 되었다면 프로세스는 종료되지 않는다.
- kill -9 또는 kill -SIGKILL 로 signal을 프로세스에게 보내게 되면 이 signal은 절대로 막을 수 없다.
#5 ps 명령어를 이용해 모든 프로세스 조회
# ps aux
# ps -ef
#6 init process
- 리눅스가 부팅하면서 제일 처음에 실행되는 프로세스
- 부모프로세스가 죽으면 자식프로세스가 종료되는 경우도 있지만 그렇지 않은 경우는 init 프로세스가 받아들인다.
*** 로그인해서 명령어를 실행시킨 상태
~ init -> login -> bash -> 명령어1 -> 명령어2 ...
*** 원격 로그인으로 명령어를 실행시킨 상태
~ init -> sshd -> sshd -> bash -> 명령어 1 ...
*** login 프로세스 종료시 bash쉘의 변화
#7 부모프로세스와 자식프로세스 확인
*** process1.c
-> 하나의 프로세스
*** process2.c
-> 해당 코드는 fork()를 이용해 자식 프로세스를 생성하므로 총 2개의 프로세스가 만들어진다.
*** 프로세스파일 컴파일후 해당파일 실행
#8 좀비프로세스 확인
- 좀비프로세스란
- 자식프로세스가 종료되면 리턴 값을 커널에서 전달받게 되는데 부모 프로세스가 커널에 이 값을 요청하여 이 값이 부모 프로세스로 리턴되면 커널이 자식 프로세스를 종료시키게 된다. 그러나 값이 전달되지 못한 경우 커널로부터 자식 프로세스 종료 명령을 받지 못하므로 자식 프로세스는 종료되지 않고 메모리에 남아 좀비 프로세스로 존재하게 된다.
*** zombie.c
-> for를 이용해 자식프로세스를 생성하고 if문을 이용해 부모프로세스 일때와 자식프로세스 일때를 구분한다.
*** 실행결과
-> sleep을 이용해 부모프로세스는 자식프로세스의 종료에 관한 커널의 리턴값을 받지 못하도록 설정하면 자식프로세스는 부모프로세스가 커널의 리턴값을 받을 때 까지 좀비상태로 남게된다.
#9 lsof 명령어
- 일반적으로 시스템에서 동작하고 있는 모든 프로세스에 의해서 열려진 파일들에 관한 정보를 보여주는 시스템 관리 명령어이다
*** lsof -i : 기본 열린 포트를 확인한다.
- lsof -p : 해당 프로세스를 분석한다.
*** lsof /dev : dev 디렉토리를 분석한다. 디렉토리대신 파일도 가능
'Linux' 카테고리의 다른 글
Linux_리눅스 쉘스크립트 (0) | 2018.07.11 |
---|---|
Linux_리눅스 netcat을 이용한 bind / reverse connection (0) | 2018.07.09 |
Linux_리눅스 사용자와 그룹 useradd / userdel (0) | 2018.07.06 |
Linux_리눅스 파일의 용량,개수 제한 / 사용자 제한 quota (0) | 2018.07.05 |
Linux_리눅스 디스크관리 / fdisk / mount (0) | 2018.07.05 |