CentOS/Study

[Study37]Linux에서의 프로세스 정보 및 관리 이해 - 프로세스 정보 / PID / PPID

AnKiWoong 2023. 4. 9. 08:59
반응형

프로세스란?

프로세스는 컴퓨터 시스템에서 실행 중인 프로그램을 가리킵니다. 이는 프로그램이 메모리에 로드되어 실제로 실행되고 있는 상태를 말합니다. 각 사용자의 실행 단계에서 공유되는 응용 프로그램은 각각 하나의 프로세스를 가지게 됩니다.

프로세스는 운영 체제의 제어를 받아 실행(running), 대기(waiting), 중단(stopped), 좀비(zombie) 등의 상태 중 하나에 있게 됩니다. 이러한 상태는 프로세스가 자원을 얻을 수 없거나, 어떤 이벤트를 기다리고 있거나, 실행을 멈춘 상태 등을 나타냅니다.

프로세스는 여러 가지 자원을 사용합니다. 해당 명령을 수행하기 위해 CPU를 점유할 수 있으며, 명령어와 데이터를 저장하기 위해 물리적인 메모리를 사용합니다. 또한 프로세스는 입출력 장치, 파일, 네트워크 등의 자원을 사용할 수 있습니다.

또한 프로세스는 자식 프로세스라고도 불리는 서브프로세스를 시작시킬 수 있습니다. 자식 프로세스는 부모 프로세스의 복제로서 부모 프로세스의 일부 자원을 공유합니다. 하지만 부모 프로세스가 종료되면 자식 프로세스는 더 이상 존재할 수 없습니다.

프로세스들은 몇 가지 IPC 방식을 통해 정보를 교환하거나 그들의 연산을 동기화할 수 있습니다. 각 프로세스는 고유의 권한과 책임을 가지고 서로 통신하며, 시스템에서 동작 중인 하나의 프로세스가 잘못된 연산을 수행하여 에러를 일으키더라도 다른 프로세스는 정상적으로 작동합니다.

프로세스는 컴퓨터 시스템에서 중요한 개념 중 하나입니다. 프로세스에 대한 이해는 컴퓨터 시스템의 설계, 구현, 유지보수에 필수적입니다. 따라서 이를 이용해 컴퓨터 시스템을 효율적으로 운영할 수 있습니다.

프로세스 정보가 포함된 디렉토리인 /proc 디렉토리에는 각 프로세스에 해당되는 PID 번호로 디렉토리들이 존재합니다. 이 디렉토리를 이용해 각 프로세스의 상태, 자원 사용량 등을 확인할 수 있습니다.

프로세스는 컴퓨터 시스템에서 중요한 개념 중 하나이므로, 프로세스에 대한 이해는 컴퓨터 시스템의 설계, 구현, 유지보수에 필수적입니다. 이러한 이유로 프로세스에 대한 깊은 이해가 요구됩니다. 예를 들어, 프로세스의 작동 원리를 이해하면 컴퓨터 시스템에서 발생할 수 있는 문제를 더욱 효과적으로 해결할 수 있습니다.

 

프로세스 정보가 존재하는 디렉토리

/proc 디렉토리는 리눅스 커널의 메모리 파일 시스템입니다. 이 디렉토리는 각 프로세스에 해당하는 PID 번호로 된 디렉토리들이 존재합니다. 이를 통해 운영체제의 다양한 정보를 얻을 수 있습니다. 예를 들어, /proc/cpuinfo 파일은 시스템에 설치된 프로세서 정보를 제공하고, /proc/meminfo 파일은 시스템 메모리 사용 정보를 제공합니다.

또한, /proc 디렉토리를 통해 각 프로세스의 상태와 자원 사용량 등을 확인할 수 있습니다. 이 정보를 통해 시스템의 성능 문제를 해결하거나, 프로세스의 문제를 찾아 해결할 수 있습니다.

하지만, /proc 디렉토리의 각 디렉토리나 파일을 직접 수정하거나 삭제하는 것은 권장되지 않습니다. 이는 시스템에 치명적인 영향을 줄 수 있기 때문입니다. 대신, 이 디렉토리를 이용해 시스템의 정보를 확인하고, 문제를 발견하는 경우에는 적절한 조치를 취하는 것이 좋습니다. 이렇게 함으로써 시스템의 안정성과 성능을 유지할 수 있습니다.

 

# ls /proc
1     2525  3065  3780  4103  4330  4431  6165         filesystems  net
10    2526  3224  3793  4108  4334  4443  635          fs           partitions
11    2527  3250  3794  4109  4335  4476  6361         ide          schedstat
12    2528  3278  3802  4110  4337  4478  658          interrupts   scsi
13    2562  3541  3808  4111  4355  4480  689          iomem        self
14    2564  3543  3817  4112  4359  4530  7            ioports      slabinfo
15    2566  3565  3842  4115  4361  5     8            irq          stat
16    2568  3569  3870  4116  4365  507   9            kallsyms     swaps
17    2570  3579  3887  4209  4368  572   acpi         kcore        sys
18    26    3590  3892  4211  4370  573   asound       key-users    sysrq-trigger
19    27    3619  3919  4212  4371  579   buddyinfo    keys         sysvipc
1932  28    3620  3937  4236  4378  580   bus          kmsg         tty
196   283   3621  3945  4238  4391  581   cmdline      loadavg      uptime
197   284   3622  3955  4254  4396  582   cpuinfo      locks        version
198   285   3631  3964  4286  4401  583   crypto       mdstat       vmcore
199   286   3655  3997  4288  4406  5877  devices      meminfo      vmmemctl
2     287   3677  4     4314  4408  599   diskstats    misc         vmstat
202   288   3696  4006  4316  4423  6     dma          modules      zoneinfo
204   289   3702  4014  4322  4427  6159  driver       mounts
25    29    3732  4041  4323  4428  6163  execdomains  mpt
2524  3     3770  4042  4328  4430  6164  fb           mtrr

위의 명령어는 /proc 디렉토리의 내용을 보여줍니다. 이 디렉토리는 리눅스 커널의 메모리 파일 시스템으로, 각 프로세스에 해당하는 PID 번호로 된 디렉토리들이 존재합니다. 이 디렉토리를 이용하면 운영체제와 시스템의 상태를 확인할 수 있습니다.

 

# ps
 PID TTY          TIME CMD
 6165 pts/1    00:00:00 bash
 6180 pts/1    00:00:00 gedit

위의 명령어는 현재 실행 중인 프로세스에 대한 정보를 보여줍니다. PID, TTY, TIME, CMD 등의 정보를 포함합니다.

 

# ls -ld /proc/6180
dr-xr-xr-x 5 root root 0 Jun 18 14:21 /proc/6180
		# ls -l /proc/6180
		# file /proc/6180/*

위의 명령어는 /proc/6180 디렉토리에 대한 정보를 보여줍니다. 여기서 -d 옵션은 디렉토리 자체에 대한 정보를 보여주며, r-xr-xr-x와 같은 문자열은 해당 디렉토리의 권한을 나타냅니다.

 

# ls -l /proc/6180

위의 명령어는 /proc/6180 디렉토리 내의 파일 목록을 보여줍니다.

 

# file /proc/6180/*

위의 명령어는 /proc/6180 디렉토리 내의 파일 종류를 알려줍니다.

 

# gedit

위의 명령어는 텍스트 편집기를 실행합니다.

 

# ls -ld /proc/6180
ls: /proc/6180: No such file or directory

위의 명령어는 /proc/6180 디렉토리에 대한 정보를 보여줍니다. 이 때, 이 디렉토리가 존재하지 않는다는 내용이 출력됩니다.

 

/proc 디렉토리는 리눅스 운영체제의 핵심적인 디렉토리 중 하나입니다. 이 디렉토리의 각 디렉토리와 파일은 시스템 정보를 제공하며, 각 프로세스에 해당하는 PID 번호로 된 디렉토리들이 존재합니다. 이를 통해 운영체제의 다양한 정보를 얻을 수 있습니다. 예를 들어, /proc/cpuinfo 파일은 시스템에 설치된 프로세서 정보를 제공하고, /proc/meminfo 파일은 시스템 메모리 사용 정보를 제공합니다.

또한, /proc 디렉토리를 통해 각 프로세스의 상태와 자원 사용량 등을 확인할 수 있습니다. 이 정보를 통해 시스템의 성능 문제를 해결하거나, 프로세스의 문제를 찾아 해결할 수 있습니다. 이러한 기능을 통해 시스템의 안정성과 성능을 유지할 수 있습니다.

위에서 제공된 명령어를 통해 /proc 디렉토리의 정보를 확인할 수 있습니다. 이 디렉토리의 파일과 디렉토리를 직접 수정하거나 삭제하는 것은 권장되지 않습니다. 이는 시스템에 치명적인 영향을 줄 수 있기 때문입니다. 대신, 이 디렉토리를 이용해 시스템의 정보를 확인하고, 문제를 발견하는 경우에는 적절한 조치를 취하는 것이 좋습니다. 이렇게 함으로써 시스템의 안정성과 성능을 유지할 수 있습니다.

 

자식프로세스(Child Process) & 부모프로세스(Parent Process)

프로세스는 컴퓨터의 작동에 있어서 필수적인 요소입니다. 각각의 프로세스는 컴퓨터에서 수행할 작업 또는 프로그램입니다. 이러한 프로세스들은 운영 체제에 의해 관리되며, 고유 식별자인 프로세스 식별번호(PID)가 할당됩니다. 또한, 부모 프로세스가 다른 프로세스를 생성할 수 있으며, 이를 자식 프로세스라고 합니다. 자식 프로세스는 부모 프로세스로부터 일부 특성을 상속합니다. 부모 프로세스는 PPID(Parent Process Identification)를 사용하여 식별할 수 있으며, 이는 자식 프로세스를 만든 프로세스의 고유 식별자입니다. 프로세스가 작동하는 방식을 이해하는 것은 프로그래밍 및 시스템 관리에 필수적입니다. 이는 자원 관리를 최적화하고 문제 해결을 효과적으로 수행하는 데 도움이 됩니다.

프로세스 식별번호(PID)는 프로세스가 시작할 때 할당됩니다. 부모 프로세스 식별번호(PPID)는 서브 프로세스를 실행시킨 프로세스의 식별번호입니다.

 

항목 설명
PID 프로세스 식별번호
PPID 부모 프로세스 식별번호

 

ps 명령어를 사용하여 현재 실행 중인 프로세스 목록을 확인합니다.

# ps
 PID TTY          TIME CMD
 7321 pts/3    00:00:00 bash

 

새로운 bash 프로세스를 실행합니다.

# bash

 

ps -f 명령어를 사용하여 프로세스 트리를 확인합니다.

# ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
root      7321  7319  0 01:19 pts/3    00:00:00 -bash
root      7354  7321  0 01:19 pts/3    00:00:00 bash

  • PID=7321
  • PID=7354, PPID=7321

 

ps -ef 명령어를 사용하여 모든 프로세스 목록을 확인합니다.

# ps -ef | more
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 19:33 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0 19:33 ?        00:00:00 [kthreadd]
root          4      2  0 19:33 ?        00:00:00 [kworker/0:0H]
root          6      2  0 19:33 ?        00:00:00 [ksoftirqd/0]
root          7      2  0 19:33 ?        00:00:00 [migration/0]
root          8      2  0 19:33 ?        00:00:00 [rcu_bh]
root          9      2  0 19:33 ?        00:00:00 [rcu_sched]
root         10      2  0 19:33 ?        00:00:00 [lru-add-drain]
root         11      2  0 19:33 ?        00:00:00 [watchdog/0]
root         12      2  0 19:33 ?        00:00:00 [watchdog/1]

 

 

항목 설명
UID 프로세스를 실행시킨 사용자, 프로세스의 주인
PID 프로세스 아이디, 프로세스 식별 번호
PPID 부모 프로세스 아이디
C 현재 사용되지 않는 필드
STIME(Start Time) 프로세스 실행 시작 시간
TTY 제어 터미널, 프로세스가 실행된 터미널
TIME CPU 사용 누적 시간
CMD 명령어(옵션 + 인자 포함)

 

데몬(Daemon)의 정의

데몬(Daemon)은 시스템이나 서비스를 위해 백그라운드에서 동작하는 프로세스입니다. 이러한 데몬들은 종종 서버나 컴퓨터에서 중요한 역할을 하며, 시스템의 안정성과 성능에 영향을 미칠 수 있습니다. 그러므로 데몬의 역할과 동작 원리에 대한 이해는 매우 중요합니다.

데몬은 커널상에서 백그라운드 모드로 작동하여 비활성화 상태에서 요청이 있을 때만 동작하는 프로세스를 말합니다. 이러한 데몬들은 대부분 시스템이 부팅될 때 자동으로 실행되며, 사용자가 직접 실행할 필요가 없습니다. 데몬은 다양한 종류가 있으며, 각각의 데몬들은 특정한 서비스를 제공하기 위해 설계되어 있습니다.

예를 들어, 웹 데몬인 httpd는 웹 서버를 제공하기 위해 사용되며, 메일 데몬인 sendmail은 이메일을 전송하기 위해 사용됩니다. 또한, ftp 데몬인 vsftpd는 FTP 서버를 제공하고, telnet 데몬인 xinetd는 원격 로그인을 제공하기 위해 사용됩니다. 이러한 데몬들은 각각의 역할을 수행하며, 서버나 컴퓨터를 보다 효율적이고 안정적으로 만들어 줍니다.

하지만 데몬은 시스템의 자원을 많이 사용하기 때문에, 적절한 관리가 필요합니다. 필요하지 않은 데몬들은 비활성화하여 자원을 아낄 수 있습니다. 또한 데몬들은 보안에 취약할 수 있으므로, 적절한 보안 조치가 필요합니다. 예를 들어 방화벽을 이용하여 데몬에 대한 접근을 제한하거나, 로그인 시 보안성을 강화하는 등의 조치가 필요할 수 있습니다. 데몬들은 시스템의 안정성과 성능에 중요한 영향을 미치므로, 적절한 관리와 보안 조치를 통해 시스템을 안정적으로 유지할 수 있습니다. 따라서, 데몬의 중요성을 인식하고 적절한 관리 및 보안 조치를 취하는 것이 필수적입니다.

프로세스와 데몬에 대한 설명을 추가하여 글을 더욱 자세하게 만들었습니다. 프로세스와 데몬의 중요성과 기능에 대해 더욱 깊이 있게 이해할 수 있으며, 관리와 보안 조치의 중요성을 강조하였습니다. 이를 통해 시스템을 보다 안정적으로 유지할 수 있도록 도움을 드리고자 합니다.

 

 

반응형