From 10587aee7222695a49d45ac9a41429c43fa9ca7d Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Mon, 7 Mar 2005 13:30:33 +0000 Subject: [PATCH] Add proctrack functions to aix plugin. Fix typo in sid plugin. --- src/plugins/proctrack/aix/proctrack_aix.c | 42 ++++++++++++++++++----- src/plugins/proctrack/sid/proctrack_sid.c | 2 +- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/plugins/proctrack/aix/proctrack_aix.c b/src/plugins/proctrack/aix/proctrack_aix.c index de715099d65..2617757ff16 100644 --- a/src/plugins/proctrack/aix/proctrack_aix.c +++ b/src/plugins/proctrack/aix/proctrack_aix.c @@ -45,9 +45,14 @@ #ifndef __USE_XOPEN_EXTENDED extern pid_t getsid(pid_t pid); /* missing from <unistd.h> */ -extern pid_t setsid(void); /* missing from <unistd.h> */ #endif +extern int proctrack_job_reg(int *jobid); /* register a job, include this proc */ +extern int proctrack_job_unreg(int *jobid); /* unregister a job */ +extern int proctrack_job_kill(int *jobid, int *signal); /* signal a job */ +extern int proctrack_get_job_id(int *pid_ptr); /* return jobid for given pid */ +extern int proctrack_dump_records(void); /* dump records */ + /* * These variables are required by the generic plugin interface. If they * are not found in the plugin, the plugin loader will ignore it. @@ -102,38 +107,57 @@ extern int fini ( void ) extern uint32_t slurm_create_container ( uint32_t job_id ) { pid_t pid = setsid(); + int jobid = (int) pid; (void) setpgrp(); if (pid < 0) { - error("slurm_create_container: setpsid: %m"); + error("slurm_create_container: setsid: %m"); return (uint32_t) 0; } - return (uint32_t) pid; + + if (proctrack_job_reg(&jobid) == 0) + return (uint32_t) pid; + + error("proctrack_job_reg(%d): %m", jobid); + return (uint32_t) 0; } extern int slurm_add_container ( uint32_t id ) { - return SLURM_SUCCESS; + error("slurm_add_container not supported"); + return SLURM_ERROR; } extern int slurm_signal_container ( uint32_t id, int signal ) { - pid_t pid = (pid_t) id; - + int jobid = (int) id; if (!id) /* no container ID */ return ESRCH; - return killpg(pid, signal); + return proctrack_job_kill(&jobid, &signal); } extern int slurm_destroy_container ( uint32_t id ) { - return SLURM_SUCCESS; + int jobid = (int) id; + + if (!id) /* no container ID */ + return ESRCH; + + if (proctrack_job_unreg(&jobid) == 0) + return SLURM_SUCCESS; + + error("proctrack_job_unreg(%d): %m", jobid); + return SLURM_ERROR; } extern uint32_t slurm_find_container(pid_t pid) { - return (uint32_t) getsid(pid); + int local_pid = (int) pid; + int cont_id = proctrack_get_job_id(&local_pid); + if (cont_id == -1) + return (uint32_t) 0; + return (uint32_t) cont_id; } diff --git a/src/plugins/proctrack/sid/proctrack_sid.c b/src/plugins/proctrack/sid/proctrack_sid.c index 4a30881033f..8a20c9c7965 100644 --- a/src/plugins/proctrack/sid/proctrack_sid.c +++ b/src/plugins/proctrack/sid/proctrack_sid.c @@ -105,7 +105,7 @@ extern uint32_t slurm_create_container ( uint32_t job_id ) (void) setpgrp(); if (pid < 0) { - error("slurm_create_container: setpsid: %m"); + error("slurm_create_container: setsid: %m"); return (uint32_t) 0; } return (uint32_t) pid; -- GitLab