기동했다

launchd
기동했다
원저작자데이브 자르지키
개발자애플사
초기 릴리즈2005년 4월 29일, 17년 전(2005-04-29)
기입처C
운영 체제macOS, FreeBSD, iOS, 시계OS
유형Init 데몬
면허증.독자 소프트웨어(이전 APSL 및 이후 Apache License 2.0)
웹 사이트opensource.apple.com/tarballs/launchd/ Edit this on Wikidata

launchd는 BSD 스타일의 init과 SystemStarter를 대체하기 위해 MacOS의 일부로 Apple Inc.의해 작성된 init 운영체제 서비스 관리 데몬입니다.Launchd를 FreeBSD 및 파생 시스템에 이식하려는 노력이 있었습니다.

구성 요소들

launchd 시스템에는 launchd와 launchctl의 두 가지 주요 프로그램이 있습니다.

launchd는 데몬을 시스템과 사용자 수준에서 모두 관리합니다.xinetd와 마찬가지로 launchd는 필요에 따라 데몬을 시작할 수 있습니다.watchd와 마찬가지로 launchd는 데몬을 감시하여 데몬이 계속 실행되도록 할 수 있습니다.launchd는 또한 MacOS에서 init을 PID 1로 대체하여 부팅 시 시스템 부팅을 담당합니다.

컨피규레이션파일은 launchd에 의해 실행되는 서비스의 파라미터를 정의합니다.라이브러리 폴더의 LaunchAgents 및 LaunchDaemons 하위 디렉터리에 저장된 속성 목록 기반 파일에는 설정할 수 있는 키가 약 30개 있습니다.launchd 자체는 이러한 컨피규레이션파일에 대한 지식이나 읽기 기능을 가지고 있지 않습니다.이것은 "slaunchctl"의 책임입니다.

launchctl은 IPC를 사용하여 launchd와 통신하고 launchd 작업을 기술하기 위해 사용되는 속성 목록 파일을 해석하는 방법을 알고 있으며 launchd를 이해하는 특수한 사전 프로토콜을 사용하여 파일을 직렬화하는 방법을 알고 있습니다.launchctl을 사용하면 데몬 로드 및 언로드, launchd 제어 작업 시작 및 중지, launchd 및 그 자식 프로세스의 시스템 사용률 통계 정보 가져오기 및 환경 설정을 수행할 수 있습니다.

기동했다

launchd에는 두 가지 주요 작업이 있습니다.첫 번째 방법은 시스템을 부팅하는 것이고 두 번째 방법은 서비스를 로드하고 유지하는 것입니다.

PowerPC Mac에서의 Mac OS X Tiger 시스템 부팅을 간략하게 보여줍니다(인텔 Mac에서는 EFIOpen Firmware를 대체하고 있습니다).boot.efiBootX를 대체합니다).

  1. [ Open Firmware ](펌웨어 열기)를 활성화하여 하드웨어를 초기화하고 BootX를 로드합니다.
  2. BootX는 커널을 로드하고 바람개비 커서를 회전시켜 필요한 커널 확장(kext)을 로드합니다.
  3. 커널이 launchd를 로드합니다.
  4. launchd 실행/etc/rc, 를 스캔하는 다양한 스크립트/System/Library/LaunchDaemons그리고./Library/LaunchDaemons는 필요에 따라 플레이스트 상에서 launchctl을 호출하고 launchd는 로그인 창을 시작합니다.

스텝 4에서 스타트업 스크립트는 실행할 작업을 위해 몇 개의 다른 디렉토리를 스캔합니다.스캔 되는 디렉토리는, 다음의 2종류가 있습니다.

  1. LaunchDaemons 디렉토리에는 루트(일반적으로 백그라운드 프로세스)로 실행되는 항목이 포함되어 있습니다.
  2. LaunchAgents 디렉터리에는 사용자로 실행되거나 사용자 영역의 컨텍스트에서 실행되는 에이전트 응용 프로그램이라는 작업이 포함됩니다.스크립트 또는 기타 포그라운드 항목일 수 있으며 사용자 인터페이스를 포함할 수도 있습니다.

이러한 디렉토리는 모두 Mac OS X의 일반적인 라이브러리 디렉토리에 보관됩니다.

launchd는 부팅 시 실제로 모든 데몬을 실행하지 않을 수 있다는 점에서 SystemStarter와 매우 다릅니다.xinetd와 마찬가지로 launch-on-demand의 개념은 launch-on-demons입니다.부팅 시 launchctl이 작업 목록을 스캔할 때 launchd에 해당 작업에 의해 요청된 모든 포트를 예약 및 수신하도록 요청합니다."OnDemand" 키로 목록에 표시된 경우 데몬은 실제로 로드되지 않습니다.대신 launchd는 포트에서 수신하고 필요할 때 데몬을 시작하여 더 이상 필요하지 않을 때 데몬을 셧다운합니다.데몬이 로드되면 launchd는 데몬을 추적하고 필요에 따라 데몬이 실행 중인지 확인합니다.이와 같이 watchd와 비슷하며 프로세스가 스스로 포크화 또는 데몬화를 시도하지 않는다는 watchd의 요구사항을 공유합니다.프로세스가 백그라운드로 진행되면 launchd는 프로세스를 추적하지 못하고 재시작을 시도합니다.

따라서 Mac OS X Tiger는 이전 릴리스보다 훨씬 빠르게 부팅됩니다.시스템은 실행할 데몬만 등록하면 되고 필요할 때까지 데몬을 실제로 실행하지 않습니다.실제로 부트시에 표시되는 프로그레스바는 플라시보 어플리케이션(Waiting For Login[1] Window 라고 하는 이름)으로 시간의 경과 이외에는 아무것도 표시되지 않습니다.

Launchd 부팅 시 가장 관리하기 어려운 부분은 의존관계입니다.SystemStarter는 스타트업 아이템 목록에서 "사용", "요구" 및 "제공" 키를 사용하는 매우 단순한 의존관계 시스템을 가지고 있었습니다.Tiger에 대한 launchd 의존관계를 작성할 때는 크게 두 가지 전략이 있습니다.IPC를 통해 데몬끼리 대화하여 의존관계를 해결하거나 데몬이 파일 또는 경로 변경을 감시할 수 있습니다.IPC를 사용하는 것은 SystemStarter의 키보다 훨씬 더 미묘하고 개발자의 더 많은 작업이 필요하지만 더[citation needed] 깨끗하고 빠른 스타트업으로 이어질 수 있습니다.System Starter는 OS X Mountain Lion까지 지원되지만 OS X Yosemite에서는 삭제되었습니다.

기동

launchd에서는 서비스 제어가 중앙 집중화되어 있습니다.launchctl어플.

launchctl 자체로는 명령줄, 표준 입력 또는 대화형 모드에서 명령을 수행할 수 있습니다.superuser 권한을 사용하면 launchctl을 사용하여 글로벌 규모로 변경할 수 있습니다.launchctl 명령어 세트는 저장 시 영구화할 수 있습니다./etc/launchd.conf. (사용자 단위)~/.launchd.conf파일은 검토된 것으로 보이지만 기존 버전의 MacOS에서는 지원되지 않습니다.)[2]

launchctl은 마하 고유의 IPC 메커니즘을 통해 launchd와 통신합니다.

속성 리스트

속성 목록(플리스트)은 launchd가 프로그램 구성에 사용하는 파일 유형입니다.launchd가 폴더를 스캔하거나 launchctl과 함께 작업을 제출하면 프로그램 실행 방법을 설명하는 목록 파일을 읽습니다.

자주 사용하는 키의 리스트를 다음에 나타냅니다.특별한 기재가 없는 한 모든 키는 옵션입니다.전체 목록은 다음 웹 사이트를 참조하십시오.launchd.plist를 클릭합니다.[3]

열쇠 유형 묘사
Label 스트링 작업의 이름.일반적으로 작업 레이블은 .plist 확장자를 사용하지 않고 plist 파일 이름과 동일합니다.필수입니다.
Program 스트링 실행 파일의 경로입니다.심플한 기동시에 편리합니다.다음 중 하나 이상Program또는ProgramArguments필수 항목입니다.
ProgramArguments 문자열 배열 UNIX 명령어를 나타내는 문자열 배열.첫 번째 문자열은 일반적으로 실행 파일의 경로이며, 두 번째 문자열은 옵션 또는 매개 변수를 포함합니다.다음 중 하나 이상Program또는ProgramArguments필수 항목입니다.
UserName 스트링
(에 준함)root또는 현재 사용자)
작업은 지정된 사용자로 실행됩니다.이 사용자는 작업을 launchd에 제출한 사용자일 수도 있고 그렇지 않을 수도 있습니다.
OnDemand

(10.5 이후 폐지)

부울
(에 준함)YES)
10.5 시점에서는 더 강력한 제품으로 권장되지 않음KeepAlive선택.작업이 연속적으로 실행되는지 여부를 정의하는 부울 플래그입니다.
RunAtLoad 부울
(에 준함)NO)
작업이 launchd에 로드될 때 태스크가 즉시 시작되는지 여부를 정의하는 부울 플래그입니다.
StartOnMount 부울
(에 준함)NO)
새 파일 시스템이 마운트될 때 작업을 시작할지 여부를 정의하는 부울 플래그입니다.
QueueDirectories 문자열 배열 디렉토리에서 새 파일을 확인합니다.디렉토리는 처음에 비어 있어야 하며, 그 전에 빈 상태로 되돌려야 합니다.QueueDirectories작업을 다시 시작합니다.
WatchPaths 문자열 배열 파일 시스템 경로의 변경 여부를 확인합니다.파일 또는 폴더일 수 있습니다.
StartInterval 정수 반복 예약에 따라 실행되도록 작업을 예약합니다.실행 간격(초)을 나타냅니다.
StartCalendarInterval 정수 사전
또는
정수 사전 배열
작업 스케줄링구문은 cron과 비슷합니다.
RootDirectory 스트링 작업이 실행되기 전에 이 디렉터리에 루트됩니다.
WorkingDirectory 스트링 작업이 실행되기 전에 이 디렉터리에 저장됩니다.

StandardInPath,
StandardOutPath,
StandardErrorPath

스트링 기동하는 프로세스의 입출력 파일을 판별하는 키.
LowPriorityIO 부울 파일 시스템 I/O를 수행할 때 이 작업의 우선 순위가 낮음을 커널에 알립니다.
AbandonProcessGroup 부울
(에 준함)NO)
launchd에 의해 시작된 작업에서 시작된 하위 프로세스가 작업이 종료될 때 중지되는지 여부를 정의하는 부울 플래그입니다.수명이 짧은 작업이 수명이 긴 하위 작업을 시작하지만 좀비 프로세스가 발생할 수 있는 경우에 유용합니다.
SessionCreate 부울
(에 준함)NO)
작업 및 하위 프로세스에 대한 보안 세션 생성 여부를 정의하는 부울 플래그입니다.

소켓 활성화 프로토콜

소켓 아래에 있는 각 키의 이름은 작업이 실행될 때 작업 환경에 배치되며 해당 소켓의 파일 기술자를 환경 변수에서 사용할 수 있습니다.이는 작업 구성 내의 소켓 정의 이름이 응용 프로그램에 하드 코딩된다는 점에서 systemd의 소켓 활성화와 다릅니다.이 프로토콜은 덜 유연하지만 systemd처럼 데몬이 시작 파일 설명자를 하드 코딩할 필요는 없습니다(2014년 현재, 3).[4]

역사

이 소프트웨어는 애플의 Dave Zarzyki에 의해 설계되고 코드화 되었다.동사는, 다음의 모든 것을 OS X 환경에서 대체하도록 계획했습니다.

– 그리고 그 대부분은 launchd가 Mac OS X v10.4(Tiger)와 함께 소개되었을 때 대체되었습니다.

2005년에 R.Tyler Croy가 FreeB에 출시되었습니다.SD는 Google Summer of Code Project의 일부입니다.PID 1(세션 초기화만)로 실행할 수 없으며 해당 [5]플랫폼에서는 일반적으로 사용되지 않았습니다.

2006년에 Ubuntu Linux 디스트리뷰션에서는 launchd 사용을 검토했습니다.이 옵션은 소스 코드가 Apple Public Source License의 적용을 받기 때문에 거부되었습니다.이것은, 「불가피한 라이센스 문제」[6]라고 기술되고 있습니다.Ubuntu는 대신 자체 서비스 관리 도구인 Upstart로 개발 및 전환했습니다.

2006년 8월, Apple은 다른 오픈 소스 개발자의 도입[7]용이하게 하기 위해 Apache License 버전 2.0으로 출시되었습니다.대부분의 Linux 디스트리뷰션에서는 systemd 또는 Upstart를 사용하거나 init을 계속하며 BSD도 init을 계속합니다.

2013년 12월, R.Tyler Croy는 FreeBSD에 대한 출항지에서의 작업을 재개할 뜻을 밝혔고, 그 후 그의 "오픈 런치" GitHub repo는 활동을 [8]재개했다.

launchd에 대한 Mac OS Forge 영역의 마지막 Wayback Machine 캡처는 2012년 [9]6월이었고, Apple의 최신 오픈 소스 버전은 OS X 10.9.5용 코드로는 842.92.1이었습니다.

2014년 OS X 10.10 및 iOS 8에서 애플은 launchd 코드를 폐쇄 소스 libxpc로 [10]이동했습니다.

2015년 8월 Jordan Hubbard와 Kip Macy는 FreeBSD-CURRENT 커널 기반의 NextBSD를 발표하면서 Mach IPC, Libdispatch, notifyd, asld, launchd 및 애플의 OS X용 오픈 소스 코드인 Darwin에서 파생된 기타 컴포넌트를 추가하였습니다.

Apple 오픈 소스 출시 이력

버전 면허증. MacOS 버전에 포함되어 있습니다. 포함된 Apple Developer Tools 버전
발사 106 Apple Public Source 라이센스[11]
launchd 106.3 Apple Public Source 라이센스[14]
  • Mac OS X 10.4.2[15]
  • Mac OS X 10.4.3[16]
  • Mac OS X 10.4.4.ppc[17]
  • Mac OS X 10.4.5.ppc[18]
launchd 106.10 Apple Public Source 라이센스[19]
  • Mac OS X 10.4.4.x86[20]
  • Mac OS X 10.4.5.x86[21]
launchd 106.13 Apple Public Source 라이센스[22]
  • Mac OS X 10.4.6.ppc[23]
  • Mac OS X 10.4.6.x86[24]
launchd 106.14 Apple Public Source 라이센스[25]
  • Mac OS X 10.4.7.ppc[26]
  • Mac OS X 10.4.7.x86[27]
  • Mac OS X 10.4.8.ppc[28]
  • Mac OS X 10.4.9.ppc[29]
  • Mac OS X 10.4.10.ppc[30]
  • Mac OS X 10.4.11.ppc[31]
launchd 106.20 Apple Public Source 라이센스[32]
  • Mac OS X 10.4.8.x86[33]
  • Mac OS X 10.4.9.x86[34]
  • Mac OS X 10.4.10.x86[35]
  • Mac OS X 10.4.11.x86[36]
  • 개발자 도구 2[37].4
발사 152 Apache 라이센스 2.0[38]
launchd 257 Apache 라이센스 2.0[39]
  • 개발자[42] 도구 3.1
  • 개발자 도구 3.1b[43]
  • 개발자[44] 도구 3.1.1
  • 개발자[45] 도구 3.1.2
  • 개발자[46] 도구 3.1.3
  • 개발자[47] 도구 3.1.4
launchd 258.1 Apache 라이센스 2.0[48]
launchd 258.12 Apache 라이센스 2.0[50]
launchd 258.18 Apache 라이센스 2.0[53]
launchd 258.19 Apache 라이센스 2.0[55]
launchd 258.22 Apache 라이센스 2.0[57]
launchd 258.25 Apache 라이센스 2.0[59]
launchd 328 Apache 라이센스 2.0[61]
  • 개발자[65] 도구 3.2.1
  • 개발자[66] 도구 3.2.2
  • 개발자[67] 도구 3.2.3
  • 개발자[68] 도구 3.2.4
launchd 329.3 Apache 라이센스 2.0[69]
launchd 329.3.1 Apache 라이센스 2.0[71]
  • 개발자[73] 도구 3.2.5
  • 개발자[74] 도구 3.2.6
launchd 329.3.2 Apache 라이센스 2.0[75]
launchd 329.3.3 Apache 라이센스 2.0[77]
launchd 392.18 Apache 라이센스 2.0[81]
launchd 392.35 Apache 라이센스 2.0[84]
launchd 392.36 Apache 라이센스 2.0[86]
launchd 392.38 Apache 라이센스 2.0[88]
launchd 392.39 Apache 라이센스 2.0[90]
launchd 442.21 Apache 라이센스 2.0[92]
launchd 442.26.2 Apache 라이센스 2.0[95]
launchd 842.1.4 Apache 라이센스 2.0[100]
launchd 842.90.1 Apache 라이센스 2.0[103]
실행d 842.92.1 Apache 라이센스 2.0[106]

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Tiger Details". Daring Fireball. WaitingForLoginWindow. Retrieved February 23, 2020.
  2. ^ launchd.conf(5)용 Mac OS X 매뉴얼 페이지
  3. ^ launchd.plist(5)용 Mac OS X 매뉴얼 페이지
  4. ^ little-big-h. "node-launchd". Retrieved April 10, 2014.
  5. ^ "Launchd". FreeBSD wiki. Retrieved December 8, 2013.
  6. ^ "ReplacementInit". UbuntuWiki. Retrieved July 2, 2007.
  7. ^ Prabhakar, Ernest (August 7, 2006). "Apple Opens Up: Kernel, Mac OS Forge, iCal Server, Bonjour, Launchd". Retrieved July 2, 2007.
  8. ^ Croy, R Tyler. "The scratchiest neckbeard, or FreeBSD on my Thinkpad X200". unethicalblogger.com. Retrieved December 8, 2013.
  9. ^ "launchd". Mac OS Forge. Apple Inc. Archived from the original on June 9, 2012. Retrieved September 3, 2016.
  10. ^ Levin, Jonathan (2014). "Launchd – At Your Service!" (PDF). p. 32. Retrieved September 3, 2016. … 10.10: moved to libxpc 559 (560 in iOS 8) – Source not available yet – and may not ever be – Libxpc is a closed source project …
  11. ^ "launchd 106 license file".
  12. ^ "Mac OS X 10.4 - Source".
  13. ^ "Mac OS X 10.4.1 - Source".
  14. ^ "launchd 106.3 license file".
  15. ^ "Mac OS X 10.4.2 - Source".
  16. ^ "Mac OS X 10.4.3 - Source".
  17. ^ "Mac OS X 10.4.4.ppc - Source".
  18. ^ "Mac OS X 10.4.5.ppc - Source".
  19. ^ "launchd 106.10 license file".
  20. ^ "Mac OS X 10.4.4.x86 - Source".
  21. ^ "Mac OS X 10.4.5.x86 - Source".
  22. ^ "launchd 106.13 license file".
  23. ^ "Mac OS X 10.4.6.ppc - Source".
  24. ^ "Mac OS X 10.4.6.x86 - Source".
  25. ^ "launchd 106.14 license file".
  26. ^ "Mac OS X 10.4.7.ppc - Source".
  27. ^ "Mac OS X 10.4.7.x86 - Source".
  28. ^ "Mac OS X 10.4.8.ppc - Source".
  29. ^ "Mac OS X 10.4.9.ppc - Source".
  30. ^ "Mac OS X 10.4.10.ppc - Source".
  31. ^ "Mac OS X 10.4.11.ppc - Source".
  32. ^ "launchd 106.20 license file".
  33. ^ "Mac OS X 10.4.8.x86 - Source".
  34. ^ "Mac OS X 10.4.9.x86 - Source".
  35. ^ "Mac OS X 10.4.10.x86 - Source".
  36. ^ "Mac OS X 10.4.11.x86 - Source".
  37. ^ "Developer Tools 2.4 - Source".
  38. ^ "launchd 152 license file".
  39. ^ "launchd 257 license file".
  40. ^ "Mac OS X 10.5 - Source".
  41. ^ "Mac OS X 10.5.1 - Source".
  42. ^ "Developer Tools 3.1 - Source".
  43. ^ "Developer Tools 3.1b - Source".
  44. ^ "Developer Tools 3.1.1 - Source".
  45. ^ "Developer Tools 3.1.2 - Source".
  46. ^ "Developer Tools 3.1.3 - Source".
  47. ^ "Developer Tools 3.1.4 - Source".
  48. ^ "launchd 258.1 license file".
  49. ^ "Mac OS X 10.5.2 - Source".
  50. ^ "launchd 258.12 license file".
  51. ^ "Mac OS X 10.5.3 - Source".
  52. ^ "Mac OS X 10.5.4 - Source".
  53. ^ "launchd 258.18 license file".
  54. ^ "Mac OS X 10.5.5 - Source".
  55. ^ "launchd 258.19 license file".
  56. ^ "Mac OS X 10.5.6 - Source".
  57. ^ "launchd 258.22 license file".
  58. ^ "Mac OS X 10.5.7 - Source".
  59. ^ "launchd 258.25 license file".
  60. ^ "Mac OS X 10.5.8 - Source".
  61. ^ "launchd 328 license file".
  62. ^ "Mac OS X 10.6 - Source".
  63. ^ "Mac OS X 10.6.1 - Source".
  64. ^ "Mac OS X 10.6.2 - Source".
  65. ^ "Developer Tools 3.2.1 - Source".
  66. ^ "Developer Tools 3.2.2 - Source".
  67. ^ "Developer Tools 3.2.3 - Source".
  68. ^ "Developer Tools 3.2.4 - Source".
  69. ^ "launchd 329.3 license file".
  70. ^ "Mac OS X 10.6.3 - Source".
  71. ^ "launchd 329.3.1 license file".
  72. ^ "Mac OS X 10.6.4 - Source".
  73. ^ "Developer Tools 3.2.5 - Source".
  74. ^ "Developer Tools 3.2.6 - Source".
  75. ^ "launchd 329.3.2 license file".
  76. ^ "Mac OS X 10.6.5 - Source".
  77. ^ "launchd 329.3.3 license file".
  78. ^ "Mac OS X 10.6.6 - Source".
  79. ^ "Mac OS X 10.6.7 - Source".
  80. ^ "Mac OS X 10.6.8 - Source".
  81. ^ "launchd 392.18 license file".
  82. ^ "Mac OS X 10.7 - Source".
  83. ^ "Mac OS X 10.7.1 - Source".
  84. ^ "launchd 392.35 license file".
  85. ^ "Mac OS X 10.7.2 - Source".
  86. ^ "launchd 392.36 license file".
  87. ^ "Mac OS X 10.7.3 - Source".
  88. ^ "launchd 392.38 license file".
  89. ^ "Mac OS X 10.7.4 - Source".
  90. ^ "launchd 392.39 license file".
  91. ^ "Mac OS X 10.7.5 - Source".
  92. ^ "licence header in launchd 442.21 source code".
  93. ^ "Mac OS X 10.8 - Source".
  94. ^ "Mac OS X 10.8.1 - Source".
  95. ^ "license header in launchd 442.26.2 source code".
  96. ^ "Mac OS X 10.8.2 - Source".
  97. ^ "Mac OS X 10.8.3 - Source".
  98. ^ "Mac OS X 10.8.4 - Source".
  99. ^ "Mac OS X 10.8.5 - Source".
  100. ^ "license header in launchd 842.1.4 source code".
  101. ^ "OS X 10.9 - Source".
  102. ^ "OS X 10.9.1 - Source".
  103. ^ "license header in launchd 842.90.1 source code".
  104. ^ "OS X 10.9.2 - Source".
  105. ^ "OS X 10.9.3 - Source".
  106. ^ "license header in launchd 842.92.1 source code".
  107. ^ "OS X 10.9.4 - Source".
  108. ^ "OS X 10.9.5 - Source".

외부 링크

Apple 개발자:

Apple Developer 사용 중지 문서 라이브러리:

기타 링크: