| /*****************************************************************************\ |
| * proctrack.h - Define process tracking plugin functions. |
| ***************************************************************************** |
| * Copyright (C) 2005-2006 The Regents of the University of California. |
| * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). |
| * Written by Morris Jette <jette1@llnl.gov> |
| * CODE-OCEC-09-009. All rights reserved. |
| * |
| * This file is part of Slurm, a resource management program. |
| * For details, see <https://slurm.schedmd.com/>. |
| * Please also read the included file: DISCLAIMER. |
| * |
| * Slurm is free software; you can redistribute it and/or modify it under |
| * the terms of the GNU General Public License as published by the Free |
| * Software Foundation; either version 2 of the License, or (at your option) |
| * any later version. |
| * |
| * In addition, as a special exception, the copyright holders give permission |
| * to link the code of portions of this program with the OpenSSL library under |
| * certain conditions as described in each individual source file, and |
| * distribute linked combinations including the two. You must obey the GNU |
| * General Public License in all respects for all of the code used other than |
| * OpenSSL. If you modify file(s) with this exception, you may extend this |
| * exception to your version of the file(s), but you are not obligated to do |
| * so. If you do not wish to do so, delete this exception statement from your |
| * version. If you delete this exception statement from all source files in |
| * the program, then also delete it here. |
| * |
| * Slurm is distributed in the hope that it will be useful, but WITHOUT ANY |
| * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| * details. |
| * |
| * You should have received a copy of the GNU General Public License along |
| * with Slurm; if not, write to the Free Software Foundation, Inc., |
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| \*****************************************************************************/ |
| |
| #ifndef _INTERFACES_PROCTRACK_H |
| #define _INTERFACES_PROCTRACK_H |
| |
| #include <stdbool.h> |
| |
| #include "slurm/slurm.h" |
| #include "src/slurmd/slurmstepd/slurmstepd_job.h" |
| |
| extern bool proctrack_forked; |
| |
| /* |
| * Initialize the process tracking plugin. |
| * |
| * Returns a Slurm errno. |
| */ |
| extern int proctrack_g_init(void); |
| |
| /* |
| * Terminate the process tracking plugin, free memory. |
| * |
| * Returns a Slurm errno. |
| */ |
| extern int proctrack_g_fini(void); |
| |
| /* |
| ************************************************************************** |
| * P L U G I N C A L L S * |
| ************************************************************************** |
| */ |
| |
| /* |
| * Create a container |
| * job IN - stepd_step_rec_t structure |
| * job->cont_id OUT - Plugin must fill in job->cont_id either here |
| * or in proctrack_g_add() |
| * |
| * Returns a Slurm errno. |
| */ |
| extern int proctrack_g_create(stepd_step_rec_t *step); |
| |
| /* |
| * Add a process to the specified container |
| * job IN - stepd_step_rec_t structure |
| * pid IN - process ID to be added to the container |
| * job->cont_id OUT - Plugin must fill in job->cont_id either here |
| * or in proctrack_g_create() |
| * |
| * Returns a Slurm errno. |
| */ |
| extern int proctrack_g_add(stepd_step_rec_t *step, pid_t pid); |
| |
| /* |
| * Signal all processes within a container |
| * cont_id IN - container ID as returned by proctrack_g_create() |
| * signal IN - signal to send, if zero then perform error checking |
| * but do not send signal |
| * |
| * Returns a Slurm errno. |
| */ |
| extern int proctrack_g_signal(uint64_t cont_id, int signal); |
| |
| |
| /* |
| * Destroy or otherwise invalidate a container, |
| * any processes within the container are not affected |
| * cont_id IN - container ID as returned by proctrack_g_create() |
| * |
| * Returns a Slurm errno. |
| */ |
| extern int proctrack_g_destroy(uint64_t cont_id); |
| |
| /* |
| * Get container ID for given process ID |
| * |
| * Returns zero if no container found for the given pid. |
| */ |
| extern uint64_t proctrack_g_find(pid_t pid); |
| |
| /* |
| * Return "true" if the container "cont_id" contains the process with |
| * ID "pid". |
| */ |
| extern bool proctrack_g_has_pid(uint64_t cont_id, pid_t pid); |
| |
| /* |
| * Wait for all processes within a container to exit. |
| * |
| * When proctrack_g_wait returns SLURM_SUCCESS, the container is considered |
| * destroyed. There is no need to call proctrack_g_destroy after |
| * a successful call to proctrack_g_wait, and in fact it will trigger |
| * undefined behavior. |
| * |
| * Return SLURM_SUCCESS or SLURM_ERROR. |
| */ |
| extern int proctrack_g_wait(uint64_t cont_id); |
| |
| /* |
| * Wait for any task to end in a step |
| * |
| * step IN - tasks in this step record will be checked |
| * ended_task OUT - pointer to ended task info if one was found |
| * block IN - If true and there are still tasks running, wait until any task |
| * ends in the step. If false, do an immediate check of whether any tasks |
| * have ended. If none have ended, *ended_task will not be modified. |
| * |
| * Return SLURM_SUCCESS or SLURM_ERROR. |
| */ |
| extern int proctrack_g_wait_for_any_task(stepd_step_rec_t *step, |
| stepd_step_task_info_t **ended_task, |
| bool block); |
| |
| /* |
| * Get all process IDs within a container. |
| * |
| * IN cont_id - Container ID. |
| * OUT pids - a pointer to an xmalloc'ed array of process ids, of |
| * length "npids". If not NULL, caller must free array with xfree(). |
| * OUT npids - number of process IDs in the returned "pids" array. |
| * |
| * Return SLURM_SUCCESS if container exists (npids may be zero, and |
| * pids NULL), return SLURM_ERROR if container does not exist, or |
| * plugin does not implement the call. |
| */ |
| extern int proctrack_g_get_pids(uint64_t cont_id, pid_t **pids, int *npids); |
| |
| /* Collect accounting information for all processes within a container */ |
| |
| #endif |