blob: 8ec6705070dde49c527e678f1aef33ee9e5bf1d7 [file] [log] [blame]
/*****************************************************************************\
* 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