Changeset 23594
- Timestamp:
- 2008-04-08 13:38:15 (5 months ago)
- Files:
-
- 1 modified
-
trunk/launchd/src/launchd_core_logic.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/launchd/src/launchd_core_logic.c
r23593 r23594 309 309 static void jobmgr_reap_bulk(jobmgr_t jm, struct kevent *kev); 310 310 static void jobmgr_log_stray_children(jobmgr_t jm); 311 static void jobmgr_kill_stray_child(jobmgr_t jm, pid_t p); 311 312 static void jobmgr_remove(jobmgr_t jm); 312 313 static void jobmgr_dispatch_all(jobmgr_t jm, bool newmounthack); … … 596 597 job_assumes(j, kevent_mod((uintptr_t)&j->exit_timeout, EVFILT_TIMER, 597 598 EV_ADD|EV_ONESHOT, NOTE_SECONDS, j->exit_timeout, j) != -1); 599 } else { 600 job_log(j, LOG_DEBUG, "This job has an infinite exit timeout"); 598 601 } 599 602 … … 2194 2197 struct kinfo_proc *kp; 2195 2198 2196 #if TARGET_OS_EMBEDDED2197 2199 if (!do_apple_internal_logging) { 2198 2200 return; 2199 2201 } 2200 #endif2201 2202 2202 2203 runtime_ktrace(RTKT_LAUNCHD_FINDING_STRAY_PG, j->p, 0, 0); … … 3064 3065 uid_t u = j->mach_uid; 3065 3066 3066 #if TARGET_OS_EMBEDDED3067 3067 if (!do_apple_internal_logging) { 3068 3068 return; 3069 3069 } 3070 #endif 3070 3071 3071 kp = malloc(len); 3072 3072 … … 4630 4630 4631 4631 void 4632 jobmgr_kill_stray_child(jobmgr_t jm, pid_t p) 4633 { 4634 struct timespec ts = { 2, 0 }; 4635 uint64_t start, end, nanosec; 4636 struct kevent kev; 4637 int r, kq = kqueue(); 4638 4639 if (!jobmgr_assumes(jm, kq != -1)) { 4640 return; 4641 } 4642 4643 EV_SET(&kev, p, EVFILT_PROC, EV_ADD, 0, 0, 0); 4644 4645 if (!jobmgr_assumes(jm, kevent(kq, &kev, 1, NULL, 0, NULL) != -1)) { 4646 goto out; 4647 } 4648 4649 start = runtime_get_opaque_time(); 4650 4651 if (!jobmgr_assumes(jm, runtime_kill(p, SIGTERM) != -1)) { 4652 goto out; 4653 } 4654 4655 r = kevent(kq, NULL, 0, &kev, 1, &ts); 4656 4657 if (!jobmgr_assumes(jm, r == 0 || r == 1)) { 4658 goto out; 4659 } 4660 4661 if (r == 0 && jobmgr_assumes(jm, runtime_kill(p, SIGKILL) != -1)) { 4662 jobmgr_assumes(jm, kevent(kq, NULL, 0, &kev, 1, NULL) == 1); 4663 } 4664 4665 end = runtime_get_opaque_time(); 4666 4667 nanosec = runtime_opaque_time_to_nano(end - start); 4668 4669 jobmgr_log(jm, LOG_DEBUG, "PID %u died after %llu nanoseconds", p, nanosec); 4670 4671 out: 4672 jobmgr_assumes(jm, runtime_close(kq) != -1); 4673 } 4674 4675 void 4632 4676 jobmgr_log_stray_children(jobmgr_t jm) 4633 4677 { … … 4636 4680 struct kinfo_proc *kp; 4637 4681 4638 #if TARGET_OS_EMBEDDED4639 4682 if (!do_apple_internal_logging) { 4640 4683 return; 4641 4684 } 4642 #endif4643 4685 4644 4686 if (likely(jm->parentmgr || !pid1_magic)) { … … 4672 4714 jobmgr_log(jm, LOG_WARNING, "Stray %sprocess at shutdown: PID %u PPID %u PGID %u %s", z, p_i, pp_i, pg_i, n); 4673 4715 4674 /* 4675 * The kernel team requested that launchd not do this for Leopard. 4676 * jobmgr_assumes(jm, runtime_kill(p_i, SIGKILL) != -1); 4677 */ 4716 jobmgr_kill_stray_child(jm, p_i); 4678 4717 } 4679 4718

