Gnome의 시스템 모니터에는 "프로세스" 탭에 "사용자" 열이 있습니다. "소유자" 열도 있습니다(기본적으로 숨겨져 있는 것으로 보입니다).
대부분의 프로세스는 두 열 모두에서 동일한 값을 갖습니다. 그러나 일부는 그렇지 않습니다.
각 열이 정확히 무엇을 표시하는지, 둘 사이의 차이점이 무엇인지 알고 싶습니다.
답변1
systemd는 완전히 새로운 초기화 시스템입니다(4년 된 것으로 생각됩니다). 그러나 systemd에는 PID 1보다 훨씬 많은 것이 포함되어 있습니다. 특히 TTY 세션, X11 세션 및 일반적으로 로그인을 관리하는 레거시 소프트웨어인 ConsoleKit의 대체 소프트웨어가 포함되어 있습니다. systemd에 대한 ConsoleKit 대체품은 logind라고 하며 많은 장점이 있습니다(예: 마침내 다중 좌석이 가능해졌는지, 기타 잘 모르겠습니다. 등).
이제 3 cgroup
초 미만으로 시스템화되었습니다. ㅏ많은. cgroup
프로세스 제어 그룹이라고도 불리는 s는 어떤 프로세스가 어떤 추상 "서비스"에 속하는지 추적하는 systemd의 방식입니다 1 . 귀하의 질문을 이해하는 열쇠는 logind
이것이 사용자에게도 적용된다는 것입니다. 각 사용자 세션에는 자체 커널 "세션"이 있으며, 이는 짐작하셨겠지만 cgroup
왜? 이렇게 하면 커널이 사용자 간 리소스를 적절하게 관리할 수 있기 때문입니다. 사용자가 많은 프로세스를 실행하고 있다고 해서 더 많은 CPU 시간을 확보해야 한다는 의미는 아닙니다. 하지만 cgroup
s의 경우 각각cgroup
프로세서에서 동일한 시간을 확보하여 모든 사용자가 동일한 리소스를 얻습니다.
자, 이제 배경이 완성되었습니다. 준비해? 위의 구성을 고려하면 귀하의 질문에 대한 실제 대답은 매우 평범합니다. 프로세스 "소유자"는 무슨 일이 있어도 프로세스를 시작한 사람에 해당합니다. 기술 수준에서 이는 사용자 세션으로 추적되며 cgroup
프로세스 "사용자"는 전통적인 의미에서 "사용자"입니다. 즉, 프로세스가 실행되는 ID(및 해당 ID와 관련된 모든 것, 특히 권한)입니다. ).
예는 다음과 같습니다. GNOME에 로그인하고 터미널을 시작합니다. GNOME 쉘, GNOME 터미널 및 gnome-session
GNOME을 구성하는 다른 모든 프로세스 실행은 사용자로 실행됩니다. 즉, 귀하(귀하가 자격 증명을 제공하고 로그인했기 때문에)는 또한 귀하의 소유입니다(말하자면 프로세스가 귀하의 잘못이기 때문입니다) 시작했습니다). 이제 sudo -u
예를 들어 보겠습니다 nobody
. 이제 ID를 가정한 프로세스를 실행하고 있지만 nobody
더 높은 추상화 수준에서는 프로세스가 여전히 사용자에 의해 시작되었으며 여전히 세션 2 에 연결되어 있습니다 . 이 수준은 사용자 cgroup
3 에 의해 추적되어 귀하가 "소유자"라는 사실을 결정합니다.
1 : Apache를 예로 들어 보겠습니다. Apache가 시작되면 모든 것을 제어하는 기본 프로세스가 있지만 여러 하위 프로세스도 생성됩니다. 기본 Apache 프로세스는 실제로 어떤 작업도 수행하지 않습니다. 단지 하위 프로세스를 지시할 뿐이며,그것들프로세스는 모든 작업을 수행하는 프로세스입니다. (이것은 다양한 이유로 수행됩니다.) Apache "서비스"의 추상 개념이 "Apache" 프로세스의 구체적인 개념에 직접적으로 매핑되지 않는다는 사실은 systemd와 같은 서비스 관리자에게 문제를 야기합니다. 이것이 cgroup
바로 s가 작동하는 곳입니다. 원래의 기본 Apache 프로세스가 제어 그룹에 배치되고, 그 다음에는 그것이 무엇을 하든 상관없이 제어 그룹에 배치됩니다.한 번그것으로부터 탈출하세요 cgroup
. 이는 Apache 서비스의 추상적인 개념이 이제 cgroup
"Apache"의 구체적인 개념에 직접 매핑될 수 있음을 의미합니다.
2 : 해당 프로세스의 PID가 /proc/$pid/sessionid
있는 프로세스의 커널 세션에 대한 일부 정보를 봅니다.$pid
3cgroup
: 을 보면 프로세스에 대해 자세히 알아볼 수 있습니다 . 여기서 문제의 프로세스의 PID는 /proc/$pid/cgroup
다음과 같습니다 .$pid
답변2
"소유자" 열은 이 특정 프로세스가 속한 세션을 소유한 사용자의 이름과 관련됩니다.
발췌-리눅스 커널
10.3 세션
각 프로세스 그룹은 고유한 세션에 있습니다. (프로세스가 생성되면 상위 프로세스의 세션 구성원이 됩니다.) 관례적으로 세션의 세션 ID는 세션의 첫 번째 구성원(세션 리더라고 함)의 프로세스 ID와 동일합니다. 프로세스는 시스템 호출을 사용하여 세션 ID를 찾습니다
getsid()
.
tty
각 세션에는 각 멤버 프로세스에 대한 컨트롤 tty라고도 하는 컨트롤이 있을 수 있습니다 . tty를 제어하는 파일 설명자는 이를 열어서 얻을 수 있습니다/dev/tty
. (실패하면 컨트롤이 없습니다tty
.) 컨트롤의 파일 설명자가 주어지면tty
SID는 을 사용하여 얻을 수 있습니다tcgetsid(fd)
.세션은 일반적으로 로그인 프로세스에 의해 설정됩니다. 로그인한 터미널이 세션을 제어하는 터미널이 됩니다. 로그인 프로세스의 하위 프로세스인 모든 프로세스는 일반적으로 세션의 구성원입니다.
이것이 "세션" 열이 됩니다. 이 세션 ID의 소유자는 소유자 열입니다.
예
gnome-system-monitor
셸에서 GNOME 시스템 모니터를 실행합니다.