다음은 Linux에서 프로세스가 시작되는 방법이라는 것을 알고 있습니다.
- init.d (또는 이와 유사한 것)에서
- 쉘에서 (사용자에 의해)
- 실행 중인 네이티브 데몬에서 분기됨
Linux에서 위 범주에 속하지 않는 프로세스를 시작할 수 있습니까? 예를 들어, 사용자가 모르는 사이에 프로세스가 시작될 수 있습니까?
답변1
리눅스에서는 거의모든 공정(서버 및 데몬 포함)다음으로 시작됨포크(2)(때때로 표준 C 라이브러리에서 사용됨클론(2))자주 팔로우하다실행(2)시스템 호출. 이것데몬(3)라이브러리 함수는 이러한 기능(및 기타 몇 가지 기능)을 사용합니다.시스템 호출(에 나열됨시스템 호출(2)....)
오직예외는희귀한커널에 의해 마술처럼 시작된 프로세스. 여기에는 다음이 포함됩니다.
내부에(일반적으로
/sbin/init
이는 다음과 같을 수 있습니다.체계요즘에는 커널을 부팅하고init=/bin/bash
커널이 초기화될 때 시작되는 GRUB를 통해 이를 전달할 수 있습니다.일부커널에 의해 마법처럼 시작되는 프로그램은 거의 없습니다.(일부 외부 이벤트가 발생할 때), 때때로모듈 프로브,핫스왑, 등....
init
1980년대에 존재했던 Unix(예: SunOS3). 자동 시작과 유사한 프로세스인 AFAIK는 hotplug
최근 Linux에 추가되었습니다(아마도 Linux 3 또는 최소 2.6 이상 참조).우데브)
대부분의 프로그램과 프로세스( login
, bash
, getty
, cron
, 포함 atd
) mysqld
는 & 의 자손이며 기본적으로 예외(예: )를 무시할 init
수 있으며 모든 프로세스가 & 의 자손인 Linux 시스템을 가질 수 있습니다 (Linux 1.0이 어떤 상황인지). x 지난 세기의 커널). 사용fork
execve
hotplug
init
나무(1)프로세스 트리를 봅니다.
에 관한 위키 페이지를 읽어보세요.리눅스 시작 프로세스&PowerUp에서 Bash 프롬프트까지(약간 구식일 수 있지만 대부분 여전히 정확합니다.)
사용자 ID 설정권한과 관련된 영리한 메커니즘입니다.세스루이드(2),바우처(7),능력(7),네임스페이스(7)).
나는 독서를 추천한다고급 Linux 프로그래밍첫 번째. 그 책 뒤에는 몇 가지 함수나 시스템 호출이 나왔습니다(예:signalfd(2),이노티파이(7),전자 여론조사(7)....).