[launchd-changes] [23412] trunk/launchd/src/launchd_core_logic.c

source_changes at macosforge.org source_changes at macosforge.org
Wed Sep 19 10:38:36 PDT 2007


Revision: 23412
          http://trac.macosforge.org/projects/launchd/changeset/23412
Author:   zarzycki at apple.com
Date:     2007-09-19 10:38:35 -0700 (Wed, 19 Sep 2007)

Log Message:
-----------
More logging.

Modified Paths:
--------------
    trunk/launchd/src/launchd_core_logic.c

Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c	2007-09-19 16:22:39 UTC (rev 23411)
+++ trunk/launchd/src/launchd_core_logic.c	2007-09-19 17:38:35 UTC (rev 23412)
@@ -401,6 +401,7 @@
 static void job_callback_proc(job_t j, int flags, int fflags);
 static void job_callback_timer(job_t j, void *ident);
 static void job_callback_read(job_t j, int ident);
+static void job_log_stray_pg(job_t j);
 static job_t job_new_anonymous(jobmgr_t jm, pid_t anonpid);
 static job_t job_new(jobmgr_t jm, const char *label, const char *prog, const char *const *argv);
 static job_t job_new_via_mach_init(job_t j, const char *cmd, uid_t uid, bool ond);
@@ -1961,6 +1962,39 @@
 }
 
 void
+job_log_stray_pg(job_t j)
+{
+	int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PGRP, j->p };
+	size_t i, kp_cnt, len = 10*1024*1024;
+	struct kinfo_proc *kp;
+
+	if (!job_assumes(j, (kp = malloc(len)) != NULL)) {
+		return;
+	}
+	if (!job_assumes(j, sysctl(mib, 4, kp, &len, NULL, 0) != -1)) {
+		goto out;
+	}
+
+	kp_cnt = len / sizeof(struct kinfo_proc);
+
+	for (i = 0; i < kp_cnt; i++) {
+		pid_t p_i = kp[i].kp_proc.p_pid;
+		pid_t pp_i = kp[i].kp_eproc.e_ppid;
+		const char *z = (kp[i].kp_proc.p_stat == SZOMB) ? "zombie " : "";
+		const char *n = kp[i].kp_proc.p_comm;
+
+		if (!job_assumes(j, p_i != 0 && p_i != 1)) {
+			continue;
+		}
+
+		job_log(j, LOG_WARNING, "Stray %sprocess with PGID equal to this dead job: PID %u PPID %u %s", z, p_i, pp_i, n);
+	}
+
+out:
+	free(kp);
+}
+
+void
 job_reap(job_t j)
 {
 	struct rusage ru;
@@ -1998,6 +2032,7 @@
 		 * valid, try to kill abandoned descendant processes.
 		 */
 		if (!j->abandon_pg) {
+			job_log_stray_pg(j);
 			job_assumes(j, runtime_killpg(j->p, SIGKILL) != -1 || errno == ESRCH);
 		}
 
@@ -4127,7 +4162,7 @@
 		pid_t p_i = kp[i].kp_proc.p_pid;
 		pid_t pp_i = kp[i].kp_eproc.e_ppid;
 		pid_t pg_i = kp[i].kp_eproc.e_pgid;
-		const char *z = kp[i].kp_proc.p_stat == SZOMB ? "zombie " : "";
+		const char *z = (kp[i].kp_proc.p_stat == SZOMB) ? "zombie " : "";
 		const char *n = kp[i].kp_proc.p_comm;
 
 		if (p_i == 0 || p_i == 1) {

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070919/1f3ca84d/attachment.html


More information about the launchd-changes mailing list