터미널에서 열 때와 두 번 클릭하여 열 때 PPID가 다른 이유는 무엇입니까?

터미널에서 열 때와 두 번 클릭하여 열 때 PPID가 다른 이유는 무엇입니까?

저는 리눅스를 사용하고 있습니다. 내가 열 때편집자gedit 명령을 통해 gnome-terminal에서 프로그램을 실행하면 그래픽 gedit 텍스트 편집기가 열렸습니다. 그런 다음 gedit에는 PPID가 있습니다세게 때리다

    ashokkrishna@ashokkrishna-Lenovo-B560:~$ ps -eaf | grep gedit
    ashokkr+  1682   820  3 04:09 pts/6    00:00:00 gedit
    ashokkr+  1695  1568  0 04:09 pts/9    00:00:00 grep --color=auto gedit

여기서 820은 PID입니다.세게 때리다

ashokkr+   820 32505  0 03:32 pts/6    00:00:00 bash

하지만 gedit 아이콘을 두 번 클릭하여 동일한 gedit를 열면.

ashokkrishna@ashokkrishna-Lenovo-B560:~$ ps -eaf | grep gedit
ashokkr+  1855  1982 14 04:16 ?        00:00:00 /usr/bin/gedit

나는 1982 PPID를 얻습니다.내부에

1982 ?        00:00:00 init

이제 내 질문은 왜상위 프로세스둘 다 상황이 다른가요?
시작하는 정확한 프로세스는 무엇입니까?사용자프로세스?

답변1

당신이 보는 것은 당신을 놀라게해서는 안됩니다. 두 개의 다른 상위 프로세스를 통해 두 가지 다른 방식으로 실행하므로 gedit두 경우 모두 PPID(상위 프로세스 ID)가 다릅니다.

첫 번째는 Bash 명령줄에서 시작했기 때문에 Bash의 하위 항목입니다.

두 번째 하위 프로세스의 초기 프로세스는 운영 체제의 GUI 시스템이 되지만두 갈래로 갈라진배경으로 들어가면 고립되니까내부에채택하세요. 이것은표준 방식Unix/Linux 시스템에서 고아 프로세스를 처리합니다.

쉘(Bash)은 두 번째 경우를 전혀 다루지 않습니다. Bash는 시스템의 일부 핵심 구성 요소에 의해 실행되는 Gnome Terminal의 전복 버전입니다. Ubuntu 14.10 시스템에 표시 되는 것은 upstart상위 시스템이지만 이는 Linux 및 Unix 시스템에 따라 다릅니다. 터미널이 닫히면 Bash도 닫히며, 어떤 방식으로든 백그라운드로 가져오지 않은 Bash에 의해 시작된 모든 프로그램도 닫힙니다.

궁극적으로 모든 프로세스는 일반적으로 커널 주변의 일부 래퍼를 통해 커널에 의해 시작됩니다.execve(2)시스템 호출. 그러나 여기서는 커널을 상위 프로세스로 생각하지 않습니다. 커널은 일부 사용자 프로세스를 대신하여 실행되므로 해당 프로세스는 상위 프로세스로 기록됩니다.

그 이유 init(8)는 PID 1이 재정의되지 않았기 때문입니다.다른 대답으로.

관련 정보