저장해 둔 PID 는 유령이야
재부팅 뒤, 또는 데몬 자체가 사라진 뒤에, 적어 둔 숫자는 프로세스가 아니야. 지금은 다른 것 것이거나, 아무도 아닌 유령이야. 저장해 둔 PID 가 아직 살아 있다고 치는 복원은, 엉뚱한 일에 붙거나 아무것도 아닌 것에 붙고, 그다음 컴파일러가 돌아왔다고 말하는 길이야. 안 돌아왔어. 우연히 같은 번호의 새 프로세스는 옛 프로세스가 아니야. 부활이 거짓말이야. 다시 만들기가 진실이야. 이건 저장해 둔 레시피로 띄운 새 프로세스야.
레시피는 선언이야. 호스트, 명령, 디렉터리, 분할 기하, 자리 이름일 수도. 복원은 그 호스트의 그 디렉터리에서 그 명령을 다시 돌려. 저널의 마지막 줄을 긁어 바라지 않아. 중간에 잡힌 임의 명령은 부작용을 복제하는 길이야. 이미 돌린 배포, 이미 옮긴 마이그레이션, 이미 지운 rm. 저널은 출력의 이력이지, 입력으로 재생할 스크립트가 아니야.
허용 목록만이 저승이야
셸 레시피는 쉬워. 선언된 디렉터리에서 선언된 셸을 띄우면 돼. REPL 이나 편집기는 달라. 사람들은 python 이, 또는 vim 이, 파일 한가운데에 있던 셸로서가 아니라 자기 자신으로서 돌아오길 원해. 그 저승은 허용 목록에 있는 프로그램에만 열려. 기본 목록은 제품 결정이고, 운영자가 늘릴 수 있어. argv[0] 을 냄새 맡아 짐작하는 휴리스틱이 아니야. 목록에 없으면 복원은 선언된 셸을 주지, 빌드 한가운데 있던 컴파일러의 두 번째 사본을 주지 않아.
짐작은 명령의 위험한 반쪽을 부활시키는 길이야. 허용 목록은 어떤 전경 프로그램이 자기 자신으로 다시 시작해도 안전한지를 큰 소리로 말하는 길이야. 나머지는 레시피의 셸로 돌아와 기다려. 그 기다림은 빠진 기능이 아니야. 일을 복제하지 않겠다는 거절이야.
부트 UUID 가 선을 그어
살아있는 프로세스는 재부팅을 못 살아. 선언은 살아. 데몬에게는 다툴 수 없는 선이 필요해. 이번 부팅은 그 부팅이 아니다. 부트 UUID(sysctl kern.bootsessionuuid, 하드웨어 IOKit id 가 아님)가 그 선이야. 같은 부팅, 데몬이 살아 있으면 죽은 투영이 살아있는 일에 다시 붙을 수 있어. 같은 부팅에서 데몬이 다시 시작되면 PTY 는 없어. 복원은 선언으로 다시 만들어. 새 부팅, 살아있는 일은 없고, 복원은 선언만으로 다시 만들어. PID 를 얼마나 영리하게 저장해도 그 선을 정직하게 넘지 못해.
이게 폰이 설 맥 쪽 뿌이야. 지난주 PID 가 아직 있는 척하며 "복원"하는 주머니 표면은, 엉뚱한 곳에 치게 되는 주머니 표면이야. 복원은 크롬에서 진실을 말해. 새 프로세스, 옛 레시피. 돌릴지는 운영자가 정해.