āĻ•āĻŋāĻ­āĻžāĻŦā§‡ macOS āĻ āĻĒā§āĻ°āĻ¸ā§‡āĻ¸ āĻāĻŦāĻ‚ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻ°āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦā§‡āĻ¨

āĻšā§āĻ¯āĻžāĻ˛ā§‹, āĻšāĻžāĻŦāĻ°! āĻ†āĻœ āĻ†āĻŽāĻŋ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ macOS āĻ āĻ†āĻ•ā§āĻ°āĻŽāĻŖāĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻ†āĻ•ā§āĻ°āĻŽāĻŖ āĻĨā§‡āĻ•ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ°āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻ¸ā§‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛āĻ¤ā§‡ āĻšāĻžāĻ‡āĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻŸāĻŋāĻ­āĻžāĻ‡āĻ°āĻžāĻ¸ āĻŦāĻž āĻŦā§āĻ¯āĻžāĻ•āĻ†āĻĒ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ‰āĻĒāĻ¯ā§‹āĻ—ā§€, āĻŦāĻŋāĻļā§‡āĻˇ āĻ•āĻ°ā§‡ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ macOS āĻāĻ° āĻ…āĻ§ā§€āĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•ā§‡ "āĻšāĻ¤ā§āĻ¯āĻž" āĻ•āĻ°āĻžāĻ° āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ•āĻžāĻŸāĻž āĻ…āĻ§ā§€āĻ¨ā§‡ āĻāĻ‡ āĻāĻŦāĻ‚ āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻž āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻĒāĻĄāĻŧā§āĻ¨.

āĻ•āĻŋāĻ­āĻžāĻŦā§‡ macOS āĻ āĻĒā§āĻ°āĻ¸ā§‡āĻ¸ āĻāĻŦāĻ‚ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻ°āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦā§‡āĻ¨

āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž "āĻšāĻ¤ā§āĻ¯āĻž" āĻ•āĻ°āĻžāĻ° āĻ•ā§āĻ˛āĻžāĻ¸āĻŋāĻ• āĻ‰āĻĒāĻžāĻ¯āĻŧ

āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•ā§‡ "āĻšāĻ¤ā§āĻ¯āĻž" āĻ•āĻ°āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻšāĻ˛ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŋāĻ—āĻ•āĻŋāĻ˛ āĻ¸āĻ‚āĻ•ā§‡āĻ¤ āĻĒāĻžāĻ āĻžāĻ¨ā§‹āĨ¤ āĻŦā§āĻ¯āĻžāĻļā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻŽāĻžāĻ°āĻ¤ā§‡ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ "āĻ•āĻŋāĻ˛ -āĻ¸āĻŋāĻ—āĻ•āĻŋāĻ˛ āĻĒāĻŋāĻ†āĻ‡āĻĄāĻŋ" āĻŦāĻž "āĻĒāĻŋāĻ•āĻŋāĻ˛ -9 āĻ¨āĻžāĻŽ" āĻ•āĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ "āĻ•āĻŋāĻ˛" āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻŸāĻŋ UNIX-āĻāĻ° āĻĻāĻŋāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° macOS-āĻ āĻ¨āĻ¯āĻŧ, āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ UNIX-āĻāĻ° āĻŽāĻ¤ā§‹ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ“ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§āĨ¤

UNIX-āĻāĻ° āĻŽāĻ¤ā§‹ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻŽāĻ¤ā§‹, macOS āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻĻā§āĻŸāĻŋ āĻ›āĻžāĻĄāĻŧāĻž āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻ¸āĻ‚āĻ•ā§‡āĻ¤ āĻ†āĻŸāĻ•āĻžāĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧ - SIGKILL āĻāĻŦāĻ‚ SIGSTOPāĨ¤ āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻ¸āĻŋāĻ—āĻ•āĻŋāĻ˛ āĻ¸āĻ‚āĻ•ā§‡āĻ¤āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ•ā§‡āĻ¤ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻĢā§‹āĻ•āĻžāĻ¸ āĻ•āĻ°āĻŦā§‡ āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•ā§‡ āĻšāĻ¤ā§āĻ¯āĻž āĻ•āĻ°ā§‡āĨ¤

macOS āĻ¸ā§āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ

macOS-āĻ, XNU āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ā§‡ āĻ•āĻŋāĻ˛ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ•āĻ˛ psignal(SIGKILL,...) āĻĢāĻžāĻ‚āĻļāĻ¨āĻ•ā§‡ āĻ•āĻ˛ āĻ•āĻ°ā§‡āĨ¤ āĻ‡āĻ‰āĻœāĻžāĻ°āĻ¸ā§āĻĒā§‡āĻ¸ā§‡ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸āĻŋāĻ—āĻ¨ā§āĻ¯āĻžāĻ˛ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦāĻ˛āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¤āĻž āĻĻā§‡āĻ–āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻž āĻ¯āĻžāĻ•āĨ¤ āĻ†āĻ¸ā§āĻ¨ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ā§‡āĻ° āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖ āĻŽā§‡āĻ•āĻžāĻ¨āĻŋāĻœāĻŽā§‡āĻ° āĻ¸āĻŋāĻ—āĻ¨ā§āĻ¯āĻžāĻ˛ āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻ•āĻ˛āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻŦāĻžāĻĻ āĻĻā§‡āĻ‡ (āĻ¯āĻĻāĻŋāĻ“ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻ…-āĻ¤ā§āĻšā§āĻ› āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ†āĻŽāĻ°āĻž āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ…āĻ¨ā§āĻ¯ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ›ā§‡āĻĄāĻŧā§‡ āĻĻā§‡āĻŦ 🙂 - āĻ¸ā§āĻŦāĻžāĻ•ā§āĻˇāĻ° āĻ¯āĻžāĻšāĻžāĻ‡āĻ•āĻ°āĻŖ, āĻŽā§‡āĻŽāĻ°āĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋ, āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨/āĻŦāĻ¨ā§āĻ§ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻŋāĻ‚, āĻĢāĻžāĻ‡āĻ˛ āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻž āĻ˛āĻ™ā§āĻ˜āĻ¨ āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ .

āĻāĻ° āĻĢāĻžāĻ‚āĻļāĻ¨ āĻāĻŦāĻ‚ āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ•āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§‹āĻšāĻ¨āĻž āĻļā§āĻ°ā§ āĻ•āĻ°āĻž āĻ¯āĻžāĻ• āĻŸāĻžāĻ°ā§āĻŽāĻŋāĻ¨ā§‡āĻŸ_āĻ¸āĻžāĻĨā§‡_āĻĒā§‡āĻ˛ā§‹āĻĄ. āĻāĻŸāĻŋ āĻĻā§‡āĻ–āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¯ā§‡ āĻ•ā§āĻ˛āĻžāĻ¸āĻŋāĻ• āĻ•āĻŋāĻ˛ āĻ•āĻ˛ āĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž macOS āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻŋāĻ‚ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻāĻŦāĻ‚ BSD-āĻ¤ā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¨āĻžāĨ¤ āĻ‰āĻ­āĻ¯āĻŧ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ•āĻ˛ā§‡āĻ° āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻŋāĻ‚ āĻ¨ā§€āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋāĻ“ āĻāĻ•āĻ‡ āĻ°āĻ•āĻŽāĨ¤ āĻ¤āĻžāĻ°āĻž āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻĢāĻžāĻ‚āĻļāĻ¨ psignal āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ•āĻ˛. āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻšāĻ¤ā§āĻ¯āĻž āĻ•āĻ°āĻžāĻ° āĻ†āĻ—ā§‡, āĻāĻ•āĻŸāĻŋ "āĻ•ā§āĻ¯āĻžāĻ¨āĻ¸āĻŋāĻ—āĻ¨ā§āĻ¯āĻžāĻ˛" āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ - āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋ āĻ…āĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ•ā§‡āĻ¤ āĻĒāĻžāĻ āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ•āĻŋāĻ¨āĻž; āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽāĻŸāĻŋ āĻ•ā§‹āĻ¨āĻ“ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ•ā§‡ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻšāĻ¤ā§āĻ¯āĻž āĻ•āĻ°āĻžāĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧ āĻ¨āĻž, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒāĨ¤

static int
terminate_with_payload_internal(struct proc *cur_proc, int target_pid, uint32_t reason_namespace,
				uint64_t reason_code, user_addr_t payload, uint32_t payload_size,
				user_addr_t reason_string, uint64_t reason_flags)
{
...
	target_proc = proc_find(target_pid);
...
	if (!cansignal(cur_proc, cur_cred, target_proc, SIGKILL)) {
		proc_rele(target_proc);
		return EPERM;
	}
...
	if (target_pid == cur_proc->p_pid) {
		/*
		 * psignal_thread_with_reason() will pend a SIGKILL on the specified thread or
		 * return if the thread and/or task are already terminating. Either way, the
		 * current thread won't return to userspace.
		 */
		psignal_thread_with_reason(target_proc, current_thread(), SIGKILL, signal_reason);
	} else {
		psignal_with_reason(target_proc, SIGKILL, signal_reason);
	}
...
}

āĻšāĻžāĻ˛ā§

āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ¸ā§āĻŸāĻžāĻ°ā§āĻŸāĻ†āĻĒā§‡ āĻĄā§‡āĻŽāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻāĻŦāĻ‚ āĻ¤āĻžāĻĻā§‡āĻ° āĻœā§€āĻŦāĻ¨āĻ•āĻžāĻ˛ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ•āĻ°āĻžāĻ° āĻ†āĻĻāĻ°ā§āĻļ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ…āĻ¨ā§āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡ āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻ‰āĻ¤ā§āĻ¸āĻ—ā§āĻ˛āĻŋ āĻŽā§āĻ¯āĻžāĻ•āĻ“āĻāĻ¸ 10.10 āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ˛āĻžā§āĻšāĻŸāĻŋāĻāĻ˛-āĻāĻ° āĻĒā§āĻ°āĻžāĻ¨ā§‹ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ•ā§‹āĻĄ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ—ā§āĻ˛āĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡āĻ° āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ā§‡ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ†āĻ§ā§āĻ¨āĻŋāĻ• āĻ˛āĻžā§āĻšāĻŸāĻŋāĻāĻ˛ āĻāĻ•ā§āĻ¸āĻĒāĻŋāĻ¸āĻŋāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ˛āĻžā§āĻšāĻĄ āĻ¸āĻ‚āĻ•ā§‡āĻ¤ āĻĒāĻžāĻ āĻžāĻ¯āĻŧ, āĻ˛āĻžā§āĻšāĻŸāĻŋāĻāĻ˛ āĻ˛āĻœāĻŋāĻ• āĻāĻŸāĻŋāĻ¤ā§‡ āĻ¸āĻ°āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻšāĻ˛ā§āĻ¨ āĻĻā§‡āĻ–ā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ• āĻ āĻŋāĻ• āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ SIGTERM āĻ¸āĻ‚āĻ•ā§‡āĻ¤ āĻĒāĻžāĻ āĻžāĻ¨ā§‹āĻ° āĻ†āĻ—ā§‡, āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋāĻ•ā§‡ "proc_terminate" āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ•āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

<launchctl src/core.c>
...
	error = proc_terminate(j->p, &sig);
	if (error) {
		job_log(j, LOG_ERR | LOG_CONSOLE, "Could not terminate job: %d: %s", error, strerror(error));
		job_log(j, LOG_NOTICE | LOG_CONSOLE, "Using fallback option to terminate job...");
		error = kill2(j->p, SIGTERM);
		if (error) {
			job_log(j, LOG_ERR, "Could not signal job: %d: %s", error, strerror(error));
		} 
...
<>

āĻšā§āĻĄā§‡āĻ° āĻ¨āĻŋāĻšā§‡, proc_terminate, āĻāĻ° āĻ¨āĻžāĻŽ āĻĨāĻžāĻ•āĻž āĻ¸āĻ¤ā§āĻ¤ā§āĻŦā§‡āĻ“, SIGTERM āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° psignal āĻĒāĻžāĻ āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¨āĻž, SIGKILLāĻ“ āĻĒāĻžāĻ āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻĒāĻ°ā§‹āĻ•ā§āĻˇ āĻšāĻ¤ā§āĻ¯āĻž - āĻ¸āĻŽā§āĻĒāĻĻ āĻ¸ā§€āĻŽāĻž

āĻāĻ•āĻŸāĻŋ āĻ†āĻ°āĻ“ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻ•ā§‡āĻ¸ āĻ…āĻ¨ā§āĻ¯ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ•āĻ˛ā§‡ āĻĻā§‡āĻ–āĻž āĻ¯āĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž_āĻ¨ā§€āĻ¤āĻŋ. āĻāĻ‡ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ•āĻ˛ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻšāĻ˛ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸ā§€āĻŽāĻŋāĻ¤ āĻ•āĻ°āĻž, āĻ¯ā§‡āĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¸ā§‚āĻšāĻ•ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŋāĻĒāĻŋāĻ‡āĻ‰ āĻ¸āĻŽāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻŽā§‡āĻŽāĻ°āĻŋ āĻ•ā§‹āĻŸāĻž āĻ¸ā§€āĻŽāĻŋāĻ¤ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¤ā§‡ āĻĢāĻžāĻ‡āĻ˛ āĻ•ā§āĻ¯āĻžāĻļāĻŋāĻ‚ āĻ•āĻžāĻ°ā§āĻ¯āĻ•ā§āĻ°āĻŽ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽāĻŸāĻŋ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻ¯ā§‹āĻ—ā§āĻ¯āĻ­āĻžāĻŦā§‡ āĻ§ā§€āĻ° āĻ¨āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¯āĻĻāĻŋ āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ¤āĻžāĻ° āĻ°āĻŋāĻ¸ā§‹āĻ°ā§āĻ¸ āĻ¸ā§€āĻŽāĻžāĻ¯āĻŧ āĻĒā§ŒāĻāĻ›ā§‡ āĻ¯āĻžāĻ¯āĻŧ, āĻ¯ā§‡āĻŽāĻ¨āĻŸāĻŋ proc_apply_resource_actions āĻĨā§‡āĻ•ā§‡ āĻĻā§‡āĻ–āĻž āĻ¯āĻžāĻ¯āĻŧ, āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ SIGKILL āĻ¸āĻ‚āĻ•ā§‡āĻ¤ āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧāĨ¤

āĻ¯āĻĻāĻŋāĻ“ āĻāĻ‡ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ•āĻ˛āĻŸāĻŋ āĻ¸āĻŽā§āĻ­āĻžāĻŦā§āĻ¯āĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•ā§‡ āĻŽā§‡āĻ°ā§‡ āĻĢā§‡āĻ˛āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¤āĻŦā§‡ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽāĻŸāĻŋ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ•āĻ˛āĻŸāĻŋāĻ•ā§‡ āĻ•āĻ˛ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋāĻ° āĻ…āĻ§āĻŋāĻ•āĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻĒāĻ°ā§āĻ¯āĻžāĻĒā§āĻ¤āĻ­āĻžāĻŦā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡āĻ¨āĻŋāĨ¤ āĻ†āĻ¸āĻ˛ā§‡ āĻ¯āĻžāĻšāĻžāĻ‡ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ‡ āĻļāĻ°ā§āĻ¤āĻŸāĻŋ āĻŦāĻžāĻ‡āĻĒāĻžāĻ¸ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻĒāĻ¤āĻžāĻ•āĻž PROC_POLICY_ACTION_SET āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¯āĻĨā§‡āĻˇā§āĻŸāĨ¤

āĻ…āĻ¤āĻāĻŦ, āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋāĻ° CPU āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻ•ā§‹āĻŸāĻž "āĻ¸ā§€āĻŽāĻŋāĻ¤" āĻ•āĻ°ā§‡āĻ¨ (āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° 1 āĻāĻ¨āĻāĻ¸ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧ), āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•ā§‡ āĻŽā§‡āĻ°ā§‡ āĻĢā§‡āĻ˛āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻŽā§āĻ¯āĻžāĻ˛āĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻŸāĻŋāĻ­āĻžāĻ‡āĻ°āĻžāĻ¸ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸āĻš āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻ¯ā§‡ āĻ•ā§‹āĻ¨āĻ“ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•ā§‡ āĻŽā§‡āĻ°ā§‡ āĻĢā§‡āĻ˛āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻĒāĻŋāĻĄ 1 (āĻ˛āĻžā§āĻšāĻ¸āĻŋāĻŸāĻŋāĻāĻ˛) āĻĻāĻŋāĻ¯āĻŧā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•ā§‡ āĻšāĻ¤ā§āĻ¯āĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¯ā§‡ āĻĒā§āĻ°āĻ­āĻžāĻŦāĻŸāĻŋ āĻ˜āĻŸā§‡ āĻ¤āĻžāĻ“ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ - āĻ¸āĻŋāĻ—āĻ•āĻŋāĻ˛ āĻ¸āĻ‚āĻ•ā§‡āĻ¤ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻĒā§āĻ¯āĻžāĻ¨āĻŋāĻ• :)

āĻ•āĻŋāĻ­āĻžāĻŦā§‡ macOS āĻ āĻĒā§āĻ°āĻ¸ā§‡āĻ¸ āĻāĻŦāĻ‚ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻ°āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦā§‡āĻ¨

āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨?

āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•ā§‡ āĻšāĻ¤ā§āĻ¯āĻž āĻ•āĻ°āĻž āĻĨā§‡āĻ•ā§‡ āĻ°āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ¸āĻšāĻœ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻšāĻ˛ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ•āĻ˛ āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻžāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĨ¤ āĻĻā§āĻ°ā§āĻ­āĻžāĻ—ā§āĻ¯āĻŦāĻļāĻ¤, āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻ…āĻ¨ā§‡āĻ• āĻ•āĻžāĻ°āĻŖā§‡ āĻ… āĻ¤ā§āĻšā§āĻ›āĨ¤

āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻ¯ā§‡ āĻšāĻŋāĻšā§āĻ¨āĻŸāĻŋ sysent-āĻāĻ° āĻŽā§‡āĻŽāĻ°āĻŋ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¨ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ•āĻ°ā§‡ āĻ¤āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° XNU āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻšāĻŋāĻšā§āĻ¨ā§‡āĻ° āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻ¨āĻ¯āĻŧ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻĒā§āĻ°āĻ¤ā§€āĻ•āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§‡ āĻ¨āĻžāĨ¤ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻšāĻŋāĻ‰āĻ°āĻŋāĻ¸ā§āĻŸāĻŋāĻ• āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡, āĻ¯ā§‡āĻŽāĻ¨ āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ āĻ—āĻ¤āĻŋāĻļā§€āĻ˛āĻ­āĻžāĻŦā§‡ āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āĻ¨ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻžāĻ° āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻ•āĻ°āĻžāĨ¤

āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧāĻ¤, āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡āĻ° āĻāĻ¨ā§āĻŸā§āĻ°āĻŋāĻ° āĻ—āĻ āĻ¨ āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛āĻŸāĻŋ āĻ¯ā§‡ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ āĻ¤āĻžāĻ° āĻ‰āĻĒāĻ°āĨ¤ āĻ¯āĻĻāĻŋ CONFIG_REQUIRES_U32_MUNGING āĻĒāĻ¤āĻžāĻ•āĻž āĻ˜ā§‹āĻˇāĻŖāĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ•āĻžāĻ āĻžāĻŽā§‹āĻ° āĻ†āĻ•āĻžāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻž āĻšāĻŦā§‡ - āĻāĻ•āĻŸāĻŋ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ° āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻŦā§‡ sy_arg_munge32. āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻ•ā§‹āĻ¨ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻ—ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻšā§‡āĻ• āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨, āĻ…āĻĨāĻŦāĻž āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāĻ­āĻžāĻŦā§‡, āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤āĻĻā§‡āĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§‡ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻžāĻ° āĻšā§‡āĻ• āĻ•āĻ°ā§āĻ¨āĨ¤

struct sysent {         /* system call table */
        sy_call_t       *sy_call;       /* implementing function */
#if CONFIG_REQUIRES_U32_MUNGING || (__arm__ && (__BIGGEST_ALIGNMENT__ > 4))
        sy_munge_t      *sy_arg_munge32; /* system call arguments munger for 32-bit process */
#endif
        int32_t         sy_return_type; /* system call return types */
        int16_t         sy_narg;        /* number of args */
        uint16_t        sy_arg_bytes;   /* Total size of arguments in bytes for
                                         * 32-bit system calls
                                         */
};

āĻ¸ā§ŒāĻ­āĻžāĻ—ā§āĻ¯āĻŦāĻļāĻ¤, macOS-āĻāĻ° āĻ†āĻ§ā§āĻ¨āĻŋāĻ• āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡, āĻ…ā§āĻ¯āĻžāĻĒāĻ˛ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ API āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻāĻ¨ā§āĻĄāĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻ°āĻŋāĻŸāĻŋ āĻāĻĒāĻŋāĻ†āĻ‡ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻĻā§‡āĻ° āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§‡āĻ• āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻāĻ‡āĻ­āĻžāĻŦā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻ‰āĻĒāĻ°ā§‡ āĻ‰āĻ˛ā§āĻ˛āĻŋāĻ–āĻŋāĻ¤ API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ SIGKILL āĻ¸āĻ‚āĻ•ā§‡āĻ¤ āĻ¸āĻš āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ¯ā§‡āĻ•ā§‹āĻ¨ āĻ¸āĻ‚āĻ•ā§‡āĻ¤ āĻŦā§āĻ˛āĻ• āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

#include <bsm/libbsm.h>
#include <EndpointSecurity/EndpointSecurity.h>
#include <unistd.h>

int main(int argc, const char * argv[]) {
    es_client_t* cli = nullptr;
    {
        auto res = es_new_client(&cli, ^(es_client_t * client, const es_message_t * message) {
            switch (message->event_type) {
                case ES_EVENT_TYPE_AUTH_SIGNAL:
                {
                    auto& msg = message->event.signal;
                    auto target = msg.target;
                    auto& token = target->audit_token;
                    auto pid = audit_token_to_pid(token);
                    printf("signal '%d' sent to pid '%d'n", msg.sig, pid);
                    es_respond_auth_result(client, message, pid == getpid() ? ES_AUTH_RESULT_DENY : ES_AUTH_RESULT_ALLOW, false);
                }
                    break;
                default:
                    break;
            }
        });
    }

    {
        es_event_type_t evs[] = { ES_EVENT_TYPE_AUTH_SIGNAL };
        es_subscribe(cli, evs, sizeof(evs) / sizeof(*evs));
    }

    printf("%dn", getpid());
    sleep(60); // could be replaced with other waiting primitive

    es_unsubscribe_all(cli);
    es_delete_client(cli);

    return 0;
}

āĻāĻ•āĻ‡āĻ­āĻžāĻŦā§‡, āĻāĻ•āĻŸāĻŋ MAC āĻ¨ā§€āĻ¤āĻŋ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ā§‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŋāĻ¤ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ•ā§‡āĻ¤ āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻž āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ (āĻ¨ā§€āĻ¤āĻŋ proc_check_signal), āĻ•āĻŋāĻ¨ā§āĻ¤ā§ API āĻ†āĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ¨āĻ¯āĻŧāĨ¤

āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻž

āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ—ā§āĻ˛āĻŋ āĻ°āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ, āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻ¨āĻŋāĻœā§‡āĻ‡ (āĻ•ā§‡āĻ•ā§āĻ¸āĻŸ) āĻ°āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ“ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧāĨ¤ macOS āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻĻā§‡āĻ° āĻ¸āĻšāĻœā§‡ IOKit āĻĄāĻŋāĻ­āĻžāĻ‡āĻ¸ āĻĄā§āĻ°āĻžāĻ‡āĻ­āĻžāĻ° āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻĄāĻŋāĻ­āĻžāĻ‡āĻ¸āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽāĻ—ā§āĻ˛āĻŋ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻ•āĻ°āĻžāĻ° āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ, IOKit C++ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĄā§āĻ°āĻžāĻ‡āĻ­āĻžāĻ° āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•āĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻ•āĻ°ā§‡āĨ¤ āĻ‡āĻ‰āĻœāĻžāĻ°āĻ¸ā§āĻĒā§‡āĻ¸ā§‡ āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛-āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ¸ā§āĻĨāĻžāĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ• āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŋāĻ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ "āĻ–ā§āĻāĻœā§‡" āĻĒā§‡āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻŦā§‡āĨ¤

āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻ•ā§āĻ˛āĻžāĻ¸ āĻ‡āĻ¨āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤ āĻ•āĻ°āĻ¤ā§‡, ioclasscount āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

my_kext_ioservice = 1
my_kext_iouserclient = 1

āĻ¯ā§‡ āĻ•ā§‹āĻ¨ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻĄā§āĻ°āĻžāĻ‡āĻ­āĻžāĻ° āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ¯āĻŧ āĻ¤āĻžāĻ•ā§‡ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ āĻ˜ā§‹āĻˇāĻŖāĻž āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¯āĻž IOService āĻĨā§‡āĻ•ā§‡ āĻ‰āĻ¤ā§āĻ¤āĻ°āĻžāĻ§āĻŋāĻ•āĻžāĻ°āĻ¸ā§‚āĻ¤ā§āĻ°ā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ my_kext_ioservice āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ā§ˇ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻžāĻ° āĻĢāĻ˛ā§‡ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĻā§ƒāĻˇā§āĻŸāĻžāĻ¨ā§āĻ¤ āĻ¤ā§ˆāĻ°āĻŋ āĻšāĻ¯āĻŧ āĻ¯āĻž IOUserClient āĻĨā§‡āĻ•ā§‡ āĻ‰āĻ¤ā§āĻ¤āĻ°āĻžāĻ§āĻŋāĻ•āĻžāĻ°āĻ¸ā§‚āĻ¤ā§āĻ°ā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ my_kext_iouserclientā§ˇ

āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĨā§‡āĻ•ā§‡ āĻĄā§āĻ°āĻžāĻ‡āĻ­āĻžāĻ° āĻ†āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ (kextunload āĻ•āĻŽāĻžāĻ¨ā§āĻĄ), āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻĢāĻžāĻ‚āĻļāĻ¨ "āĻŦā§āĻ˛ āĻŸāĻžāĻ°ā§āĻŽāĻŋāĻ¨ā§‡āĻŸ(IOOptionBits āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ)" āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ•ā§‡āĻ•ā§āĻ¸āĻŸā§āĻ¨āĻ˛ā§‹āĻĄ āĻ…āĻ•ā§āĻˇāĻŽ āĻ•āĻ°āĻ¤ā§‡ āĻ†āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻ˛ā§‡ āĻŽāĻŋāĻĨā§āĻ¯āĻž āĻĢā§‡āĻ°āĻ¤ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻ¯āĻĨā§‡āĻˇā§āĻŸāĨ¤

bool Kext::terminate(IOOptionBits options)
{

  if (!IsUnloadAllowed)
  {
    // Unload is not allowed, returning false
    return false;
  }

  return super::terminate(options);
}

āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ IOUserClient āĻĻā§āĻŦāĻžāĻ°āĻž IsUnloadAllowed āĻĒāĻ¤āĻžāĻ•āĻž āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ¯āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ¸ā§€āĻŽāĻž āĻĨāĻžāĻ•ā§‡, āĻ•ā§‡āĻ•ā§āĻ¸āĻŸā§āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ†āĻ‰āĻŸāĻĒā§āĻŸāĻŸāĻŋ āĻĢāĻŋāĻ°āĻŋāĻ¯āĻŧā§‡ āĻĻā§‡āĻŦā§‡:

admin@admins-Mac drivermanager % sudo kextunload ./test.kext
Password:
(kernel) Can't remove kext my.kext.test; services failed to terminate - 0xe00002c7.
Failed to unload my.kext.test - (iokit/common) unsupported function.

IOUserClient āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§āĻ°ā§‚āĻĒ āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻ†āĻŦāĻļā§āĻ¯āĻ•āĨ¤ IOKitLib āĻ‡āĻ‰āĻœāĻžāĻ°āĻ¸ā§āĻĒā§‡āĻ¸ āĻĢāĻžāĻ‚āĻļāĻ¨ "IOCatalogueTerminate(mach_port_t, uint32_t āĻĒāĻ¤āĻžāĻ•āĻž, io_name_t āĻŦāĻŋāĻŦāĻ°āĻŖ);" āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ—ā§āĻ˛āĻŋ āĻ†āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ "āĻŸāĻžāĻ°ā§āĻŽāĻŋāĻ¨ā§‡āĻŸ" āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡ āĻ•āĻ˛ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŽāĻŋāĻĨā§āĻ¯āĻž āĻĢā§‡āĻ°āĻ¤ āĻĻāĻŋāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻ¯āĻ¤āĻ•ā§āĻˇāĻŖ āĻ¨āĻž āĻ‡āĻ‰āĻœāĻžāĻ°āĻ¸ā§āĻĒā§‡āĻ¸ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ "āĻĄāĻŋāĻ¸" āĻšāĻ¯āĻŧ, āĻ…āĻ°ā§āĻĨāĻžā§Ž "āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻĄāĻŋāĻĄ" āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ āĻ•āĻ˛ āĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

āĻĢāĻžāĻ‡āĻ˛ āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻž

āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋ āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡, Kauth API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¯āĻĨā§‡āĻˇā§āĻŸ, āĻ¯āĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ¸ā§€āĻŽāĻžāĻŦāĻĻā§āĻ§ āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧā§ˇ āĻ…ā§āĻ¯āĻžāĻĒāĻ˛ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻĻā§‡āĻ° āĻ¸ā§āĻ¯ā§‹āĻ—ā§‡āĻ° āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻŦāĻŋāĻœā§āĻžāĻĒā§āĻ¤āĻŋ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡; āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯, KAUTH_VNODE_DELETE, KAUTH_VNODE_WRITE_DATA āĻāĻŦāĻ‚ KAUTH_VNODE_DELETE_CHILD āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖā§ˇ āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ¸ā§€āĻŽāĻžāĻŦāĻĻā§āĻ§ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ¸āĻšāĻœ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻšāĻ˛ āĻĒāĻžāĻĨ - āĻ†āĻŽāĻ°āĻž āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻĒāĻžāĻĨ āĻĒā§‡āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻĒāĻžāĻĨ āĻĒā§āĻ°āĻŋāĻĢāĻŋāĻ•ā§āĻ¸ā§‡āĻ° āĻ¤ā§āĻ˛āĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ "vn_getpath" API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŋāĨ¤ āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻĢāĻžāĻ‡āĻ˛ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ° āĻĒāĻžāĻĨā§‡āĻ° āĻ°āĻŋāĻ¨āĻžāĻŽāĻŋāĻ‚ āĻ…āĻĒā§āĻŸāĻŋāĻŽāĻžāĻ‡āĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ āĻ•āĻ°ā§‡ āĻ¨āĻž, āĻ¤āĻŦā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸ā§‡āĻ‡ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°ā§‡ āĻ¯āĻž āĻĒā§āĻ¨āĻƒāĻ¨āĻžāĻŽāĻ•āĻ°āĻŖ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻŽā§‚āĻ˛ āĻĒāĻĨā§‡āĻ° āĻ¤ā§āĻ˛āĻ¨āĻž āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻāĻŸāĻŋāĻ° āĻœāĻ¨ā§āĻ¯ KAUTH_VNODE_DELETE āĻ¸ā§€āĻŽāĻžāĻŦāĻĻā§āĻ§ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§ˇ

āĻ•āĻŋāĻ­āĻžāĻŦā§‡ macOS āĻ āĻĒā§āĻ°āĻ¸ā§‡āĻ¸ āĻāĻŦāĻ‚ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻ°āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦā§‡āĻ¨

āĻ‰āĻĒāĻ¸āĻ°ā§āĻ—ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻŦā§ƒāĻĻā§āĻ§āĻŋāĻ° āĻ•āĻžāĻ°āĻŖā§‡ āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ…āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻ•āĻŽ āĻ•āĻ°ā§āĻŽāĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ¤ā§āĻ˛āĻ¨āĻžāĻŸāĻŋ O(āĻ‰āĻĒāĻ¸āĻ°ā§āĻ—*āĻĻā§ˆāĻ°ā§āĻ˜ā§āĻ¯) āĻāĻ° āĻ¸āĻŽāĻžāĻ¨ āĻ¨āĻž āĻšāĻ¯āĻŧ āĻ¤āĻž āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡, āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ‰āĻĒāĻ¸āĻ°ā§āĻ— āĻšāĻ˛ āĻ‰āĻĒāĻ¸āĻ°ā§āĻ—ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž, āĻĻā§ˆāĻ°ā§āĻ˜ā§āĻ¯ āĻšāĻ˛ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚āĻŸāĻŋāĻ° āĻĻā§ˆāĻ°ā§āĻ˜ā§āĻ¯, āĻ†āĻĒāĻ¨āĻŋ āĻ‰āĻĒāĻ¸āĻ°ā§āĻ— āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻ• āĻ¸āĻ¸ā§€āĻŽ āĻ…āĻŸā§‹āĻŽā§‡āĻŸāĻ¨ (DFA) āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻĒā§āĻ°āĻĻāĻ¤ā§āĻ¤ āĻ‰āĻĒāĻ¸āĻ°ā§āĻ—ā§‡āĻ° āĻ¸ā§‡āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ DFA āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°āĻž āĻ¯āĻžāĻ•āĨ¤ āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ‰āĻĒāĻ¸āĻ°ā§āĻ—ā§‡āĻ° āĻļā§āĻ°ā§āĻ¤ā§‡ āĻ•āĻžāĻ°ā§āĻ¸āĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻļā§āĻ°ā§ āĻ•āĻ°āĻŋāĨ¤ āĻ¯āĻĻāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ•āĻžāĻ°ā§āĻ¸āĻžāĻ° āĻāĻ•āĻ‡ āĻ…āĻ•ā§āĻˇāĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¸āĻžāĻ°āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ…āĻ•ā§āĻˇāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦā§ƒāĻĻā§āĻ§āĻŋ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻāĻ•āĻ‡ āĻ˛āĻžāĻ‡āĻ¨ā§‡āĻ° āĻĻā§ˆāĻ°ā§āĻ˜ā§āĻ¯ āĻāĻ• āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦāĻĄāĻŧāĨ¤ āĻ¯āĻĻāĻŋ āĻ†āĻ˛āĻžāĻĻāĻž āĻ†āĻ˛āĻžāĻĻāĻž āĻšāĻŋāĻšā§āĻ¨ āĻ¸āĻš āĻĻā§āĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¸āĻžāĻ° āĻĨāĻžāĻ•ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ•āĻžāĻ°ā§āĻ¸āĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¤āĻžāĻ°āĻž āĻ¯ā§‡ āĻšāĻŋāĻšā§āĻ¨ā§‡āĻ° āĻĻāĻŋāĻ•ā§‡ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°ā§‡ āĻ¸ā§‡āĻ‡ āĻ…āĻ¨ā§āĻ¸āĻžāĻ°ā§‡ āĻ—ā§āĻ°ā§āĻĒā§‡ āĻ­āĻžāĻ— āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ—ā§āĻ°ā§āĻĒā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§āĻ¨āĨ¤

āĻĒā§āĻ°āĻĨāĻŽ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ (āĻ•āĻžāĻ°āĻ¸āĻžāĻ°ā§‡āĻ° āĻ…āĻ§ā§€āĻ¨ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ…āĻ•ā§āĻˇāĻ° āĻāĻ•āĻ‡), āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ DFA āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻĒāĻžāĻ‡ āĻ¯āĻžāĻ° āĻāĻ•āĻ‡ āĻ˛āĻžāĻ‡āĻ¨ āĻŦāĻ°āĻžāĻŦāĻ° āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻ†āĻŽāĻ°āĻž āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋāĻ•ā§‡ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻ­āĻžāĻŦā§‡ āĻ•āĻ˛ āĻ•āĻ°āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ¸ā§āĻŸā§‡āĻŸā§‡ 256 āĻ†āĻ•āĻžāĻ°ā§‡āĻ° (āĻ…āĻ•ā§āĻˇāĻ°ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻāĻŦāĻ‚ āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ• āĻ¸āĻ‚āĻ–ā§āĻ¯āĻ• āĻ—ā§āĻ°ā§āĻĒ) āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ°ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻŸā§‡āĻŦāĻŋāĻ˛ āĻĒāĻžāĻ‡āĨ¤

āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ¤āĻžāĻ•āĻžāĻ¨. āĻ‰āĻĒāĻ¸āĻ°ā§āĻ—āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§‡āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ (“/foo/bar/tmp/”, “/var/db/foo/”, “/foo/bar/aba/”, “foo/bar/aac/”) āĻ†āĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤āĻ—ā§āĻ˛āĻŋ āĻĒā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻĄāĻŋāĻāĻĢāĻāĨ¤ āĻšāĻŋāĻ¤ā§āĻ°āĻŸāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ°āĻžāĻœā§āĻ¯ā§‡āĻ° āĻĻāĻŋāĻ•ā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ“āĻ¯āĻŧāĻž āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ; āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻšāĻŦā§‡ āĻ¨āĻžāĨ¤

āĻ•āĻŋāĻ­āĻžāĻŦā§‡ macOS āĻ āĻĒā§āĻ°āĻ¸ā§‡āĻ¸ āĻāĻŦāĻ‚ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻ°āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦā§‡āĻ¨

DKA āĻ°āĻžāĻœā§āĻ¯ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, 3āĻŸāĻŋ āĻŽāĻžāĻŽāĻ˛āĻž āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

  1. āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻĒā§ŒāĻāĻ›ā§‡ āĻ—ā§‡āĻ›ā§‡ - āĻĒāĻĨāĻŸāĻŋ āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻŋāĻ¤, āĻ†āĻŽāĻ°āĻž KAUTH_VNODE_DELETE, KAUTH_VNODE_WRITE_DATA āĻāĻŦāĻ‚ KAUTH_VNODE_DELETE_CHILD āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻ¸ā§€āĻŽāĻŋāĻ¤ āĻ•āĻ°āĻŋ
  2. āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻĒā§ŒāĻāĻ›āĻžāĻ¨ā§‹ āĻ¯āĻžāĻ¯āĻŧāĻ¨āĻŋ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻĒāĻĨ "āĻļā§‡āĻˇ" (āĻ¨āĻžāĻ˛ āĻŸāĻžāĻ°ā§āĻŽāĻŋāĻ¨ā§‡āĻŸāĻ° āĻĒā§ŒāĻāĻ›ā§‡āĻ›ā§‡) - āĻĒāĻĨāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ…āĻ­āĻŋāĻ­āĻžāĻŦāĻ•, āĻāĻŸāĻŋ KAUTH_VNODE_DELETE āĻ¸ā§€āĻŽāĻžāĻŦāĻĻā§āĻ§ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§ˇ āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻŦā§‡āĻ¨ āĻ¯ā§‡ vnode āĻāĻ•āĻŸāĻŋ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ° āĻšāĻ˛ā§‡, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻļā§‡āĻˇā§‡ āĻāĻ•āĻŸāĻŋ '/' āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡, āĻ…āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ āĻāĻŸāĻŋ "/foor/bar/t" āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ¸ā§€āĻŽāĻžāĻŦāĻĻā§āĻ§ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¯āĻž āĻ­ā§āĻ˛āĨ¤
  3. āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻĒā§ŒāĻāĻ›āĻžāĻ¯āĻŧāĻ¨āĻŋ, āĻĒāĻĨ āĻļā§‡āĻˇ āĻšāĻ¯āĻŧāĻ¨āĻŋāĨ¤ āĻ‰āĻĒāĻ¸āĻ°ā§āĻ—āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋāĻ“ āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽā§‡āĻ˛ā§‡ āĻ¨āĻž, āĻ†āĻŽāĻ°āĻž āĻŦāĻŋāĻ§āĻŋāĻ¨āĻŋāĻˇā§‡āĻ§ āĻĒā§āĻ°āĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻŋ āĻ¨āĻžāĨ¤

āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°

āĻ¯ā§‡ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡ āĻ¤āĻžāĻ° āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻšāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ° āĻĄā§‡āĻŸāĻžāĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻžāĻ° āĻ¸ā§āĻ¤āĻ° āĻŦāĻžāĻĄāĻŧāĻžāĻ¨ā§‹āĨ¤ āĻāĻ•āĻĻāĻŋāĻ•ā§‡, āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ°ā§‹āĻ¨āĻŋāĻ¸ āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻĒāĻŖā§āĻ¯ā§‡āĻ° āĻŦāĻŋāĻ•āĻžāĻļā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻāĻ‡ āĻ˛āĻ•ā§āĻˇā§āĻ¯āĻŸāĻŋ āĻ…āĻ°ā§āĻœāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻž āĻ¸ā§‡āĻ‡ āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻžāĻ—ā§āĻ˛āĻŋ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°ā§‡ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻŋāĻ‚ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ¨āĻŋāĻœā§‡āĻ‡ "āĻĻā§āĻ°ā§āĻŦāĻ˛"āĨ¤ āĻ…āĻ¨ā§āĻ¯āĻĻāĻŋāĻ•ā§‡, OS āĻāĻ° āĻĻāĻŋāĻ•ā§‡ āĻ‰āĻ¨ā§āĻ¨āĻ¤ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻāĻŽāĻ¨ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻžāĻ° āĻĻāĻŋāĻ•āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻļāĻ•ā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§€ āĻ•āĻ°āĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ…āĻŦāĻšā§‡āĻ˛āĻž āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ āĻ¨āĻ¯āĻŧ, āĻŦāĻŋāĻļā§‡āĻˇ āĻ•āĻ°ā§‡ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻžāĻ—ā§āĻ˛āĻŋ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻž āĻĒāĻŖā§āĻ¯ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ¸ā§āĻĨāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦ āĻŦāĻžāĻĄāĻŧāĻžāĻ¯āĻŧāĨ¤ āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻž āĻ…ā§āĻ¯āĻžāĻĒāĻ˛ āĻĒā§āĻ°ā§‹āĻĄāĻžāĻ•ā§āĻŸ āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻ°āĻŋāĻŸāĻŋ āĻŸāĻŋāĻŽā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ macOS 10.14.5 (https://support.apple.com/en-gb/HT210119) āĻ āĻ āĻŋāĻ• āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻ•āĻŋāĻ­āĻžāĻŦā§‡ macOS āĻ āĻĒā§āĻ°āĻ¸ā§‡āĻ¸ āĻāĻŦāĻ‚ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻ°āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦā§‡āĻ¨

āĻ†āĻĒāĻ¨āĻžāĻ° āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻ†āĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ā§‡ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻž āĻĨāĻžāĻ•āĻ˛ā§‡āĻ‡ āĻāĻ‡ āĻ¸āĻŦ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ• āĻāĻŦāĻ‚ āĻ…āĻŦāĻžāĻžā§āĻ›āĻŋāĻ¤ āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ•ā§‹āĻ¨ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ¨ā§‡āĻ‡āĨ¤ āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ†āĻĒāĻ¨āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›ā§‡āĻ¨, āĻāĻŽāĻ¨āĻ•āĻŋ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻŸāĻŋāĻ­āĻžāĻ‡āĻ°āĻžāĻ¸ āĻāĻŦāĻ‚ āĻŦā§āĻ¯āĻžāĻ•āĻ†āĻĒ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻŽāĻ¤ā§‹ āĻŦā§ˆāĻ§ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ°āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯āĻ“ āĻ•āĻžāĻœ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ–āĻ¨ macOS-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻ¤ā§āĻ¨ Acronis āĻĒāĻŖā§āĻ¯āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĨā§‡āĻ•ā§‡ āĻ†āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻžāĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§‡ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻž āĻĨāĻžāĻ•āĻŦā§‡āĨ¤

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨