blob: 604b4e1c4d8fb33d92f904aa5aedab8646a0a387 [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>
* UCRL-CODE-226842.
*
* This file is part of SLURM, a resource management program.
* For details, see <http://www.llnl.gov/linux/slurm/>.
*
* 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 __PROC_TRACK_H__
#define __PROC_TRACK_H__
#include <slurm/slurm.h>
#include "src/slurmd/slurmstepd/slurmstepd_job.h"
#include <stdbool.h>
/*
* Initialize the process tracking plugin.
*
* Returns a SLURM errno.
*/
extern int slurm_proctrack_init( void );
/*
* Terminate the process tracking plugin, free memory.
*
* Returns a SLURM errno.
*/
extern int slurm_proctrack_fini(void);
/*
**************************************************************************
* P L U G I N C A L L S *
**************************************************************************
*/
/*
* Create a container
* job IN - slurmd_job_t structure
* job->cont_id OUT - Plugin must fill in job->cont_id either here
* or in slurm_container_add()
*
* Returns a SLURM errno.
*/
extern int slurm_container_create(slurmd_job_t *job);
/*
* Add a process to the specified container
* job IN - slurmd_job_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 slurm_container_create()
*
* Returns a SLURM errno.
*/
extern int slurm_container_add(slurmd_job_t *job, pid_t pid);
/*
* Signal all processes within a container
* cont_id IN - container ID as returned by slurm_container_create()
* signal IN - signal to send, if zero then perform error checking
* but do not send signal
*
* Returns a SLURM errno.
*/
extern int slurm_container_signal(uint32_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 slurm_container_create()
*
* Returns a SLURM errno.
*/
extern int slurm_container_destroy(uint32_t cont_id);
/*
* Get container ID for given process ID
*
* Returns zero if no container found for the given pid.
*/
extern uint32_t slurm_container_find(pid_t pid);
/*
* Return "true" if the container "cont_id" contains the process with
* ID "pid".
*/
extern bool slurm_container_has_pid(uint32_t cont_id, pid_t pid);
/*
* Wait for all processes within a container to exit.
*
* When slurm_container_wait returns SLURM_SUCCESS, the container is considered
* destroyed. There is no need to call slurm_container_destroy after
* a successful call to slurm_container_wait, and in fact it will trigger
* undefined behavior.
*
* Return SLURM_SUCCESS or SLURM_ERROR.
*/
extern int slurm_container_wait(uint32_t cont_id);
/*
* 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 slurm_container_get_pids(uint32_t cont_id, pid_t **pids, int *npids);
/* Collect accounting information for all processes within a container */
#endif /*__PROC_TRACK_H__*/